• ベストアンサー

エクセル 全部のシートを自動的に読み込みたい

どなたが助けてください。 エクセルのファイルが一つのフォルダの中に 沢山あります。(CSVの場合もあります) 各ファイルには複数のシートが入っていて シート名はバラバラです。 各シートのに入っているデータは 縦は500行目まで、横は端から端まで(A列→IV列)です。 この沢山のエクセルファイルの全シートを 一つのシートに自動的に読み込んで 縦てに並べたいのです。 1ファイルの中にある全シート(1枚しかシートがない ものもあれば5枚あるものもあり もれなく全部) の500行目までを 別の新しいエクセルファイルのシートに縦に並べて 次のファイルをまた開いて全シートを 先ほど並べたデータの下にまた並べて・・・・と 繰り返して一つのフォルダの中にあるエクセルファイルの全シート重複せずに並べるような マクロをどなたか教えて頂けないでしょうか? ファイル数が大変多く、本当に困っています。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.9

For row = 1 To 500   ' 最大500行まで検索 を修正して転送する行の範囲を変える。 または If IsEmpty(srcSt.Cells(row, 1)) Then Exit For の行を削除してA列が空でも転送するようにするか。 どちらが良いかは、実際のシートを見ているあなたにしか判りません。      

cleverclober
質問者

お礼

ありがとうございました! 無事に対応することができました。 何度も丁寧に教えていただき 本当に感謝しております。 ありがとうございましたm(__)m

その他の回答 (8)

回答No.8

どのように実行してますか? ツール→マクロ→マクロ でSyuuyakuを選んで 実行ボタン または Visual Basic Editor の画面で、カーソルをSyuuyakuサブルーチンの中に置いてF5キー またこのコードは、各シートの1行目から順にデータを転送する。 A列が空の行が有るとそこで転送を終了して次のシートに処理を移す。 ので、各シートのA1が空なら何もしません。 ブレークポイントを (※F9キーで設定できる) Workbooks.Open Folder & myFile For row = 1 To 500 For col = 1 To 256 の各行に設定してマクロを実行して、 ブレークポイントの所まで来るか確認してみてください。 およびmyFileに入っている値の確認。

cleverclober
質問者

補足

ありがとうございます! 対象エクセルのシート、 A1が空でした、無条件で(A1が空白でも何か入っていても)読み取ってくれるようにするには どうしたら良いですか? もしご面倒でなければ是非教えてください。 よろしくお願いいたします。

回答No.7

ツール→マクロ→セキュリティで セキュリティレベルが(高)になってませんか? (中)または(低)にしてみてください。

cleverclober
質問者

補足

中 になっていましたので 低 にして 実行してみたのですが まったく動きません。 エラー等のメッセージが出るわけでもなく 画面上 全く変化ない状態です。

回答No.6

検索するフォルダとは別の場所にエクセルファイルを作成し、 そこのThisWorkbookに下記コードを貼り付けて実行してきてください。 検索するフォルダは、変数Folderに設定します。 エクセルファイルのみ検索します。(csvは無視) インデントのために全角スペース使ってます。(要置換) Public Sub Syuuyaku()   Dim myFile As String   Dim Folder As String   Dim srcWb As Workbook   Dim srcSt As Worksheet   Dim dstSt As Worksheet   Dim dstRow As Long   Dim row As Long   Dim col As Long   Set dstSt = ThisWorkbook.Sheets(1)   dstRow = 0   Folder = "D:\Test\"   myFile = Dir(Folder & "*.xls")   Do While myFile <> ""     Workbooks.Open Folder & myFile     Set srcWb = ActiveWorkbook     For Each srcSt In srcWb.Worksheets       For row = 1 To 500   ' 最大500行まで検索         If IsEmpty(srcSt.Cells(row, 1)) Then Exit For         dstRow = dstRow + 1         For col = 1 To 256 ' 全列           dstSt.Cells(dstRow, col).Value = srcSt.Cells(row, col).Value         Next col       Next row     Next     Set srcSt = Nothing     srcWb.Close False     Set srcWb = Nothing     myFile = Dir   Loop End Sub

cleverclober
質問者

補足

ありがとうございます! 実際、不慣れなのでアドバイスいただいたように 貼り付けてやってみたのですが 何も動きませんでした、すみませんが もうすこし詳しく教えていただけませんか? >検索するフォルダとは別の場所にエクセルファイルを作成し、 >そこのThisWorkbookに下記コードを貼り付けて実行してきてください。 →エクセルを別場所に作成しThisWorkbookに コード部分をコピペしました。 >検索するフォルダは、変数Folderに設定します。 →Folder = "D:\Test\" この""の間のパスを 実際のフォルダのあるパスに書き換えました。 >インデントのために全角スペース使ってます。(要置換) →置き換えで全角スペースを全て半角スペースに置き換えました。 あと何をしたら動くようになるのでしょうか? 無知ですみません、ここから前に進めませんm(__)m よろしくお願いいたします。

  • norakuma
  • ベストアンサー率29% (293/977)
回答No.5

あ、しまった。 それやると、シート1が消えます。 シート1を追加してください。やる前に。 bookの読み込みについては、本日は時間切れ…。すんません。

cleverclober
質問者

補足

norakumaさま ありがとうございます、 下に書いていただいたコード、そのままエクセルVBAに 貼り付けてみたのですが やっぱり動きません。 何か私の設定が悪いのでしょうか? また明日?NORAKUMAさまお待ちしておりますm(__)m

  • norakuma
  • ベストアンサー率29% (293/977)
回答No.4

>1ファイルに数シートあった場合全部のシートを読み出したいと思いました。 これだけなら Sub test1() Dim SheetCount As Integer Dim i As Integer SheetCount = ActiveWorkbook.Worksheets.Count For i = 2 To SheetCount Worksheets(i).Select Range("A1:A500").CurrentRegion.Select Selection.Copy Worksheets(1).Select If i = 2 Then Range("A1").Select Else Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Next i End Sub

  • norakuma
  • ベストアンサー率29% (293/977)
回答No.3

こんにちは。 エクセルブックのシートを読む原理は簡単ですよ。 1.シート数をカウント。 ActiveWorkbook.Worksheets.Count 2.最後のシートまで順に読み込み、新しいシートに縦に並べてと やっていけばOKです。 このとき、シート名を指定するのではなくシートの順番で読み込めば シート名に左右されずに済みます。 フォルダ内のファイル読み込みについては参考URLが参考になるのではないか?と。

参考URL:
http://www.accessclub.jp/bbs3/0186/superbeg61242.html
cleverclober
質問者

補足

ありがとうございます! 参考URLにあったコードを入れて動かしてみたのですが オペレートする側がEXCELではなくACCESSのようで 実際エクセルのVBAに貼り付けてみましたが うまく動きませんでした。 もしよろしければコードを教えて頂けないでしょうか? よろしくお願いいたします。

  • danchor
  • ベストアンサー率28% (23/80)
回答No.2

なにをなさりたいのかよく見えませんが、どうもエクセルの世界でやる範疇ではないようですね。 もっとよく考え方を整理してデータベース化に進まれては?

cleverclober
質問者

補足

エクセルのVBAマクロで ファイルのデータを読み込むマクロを持っているのですが それは1ファイルに1シートしかないエクセルファイルを読み込めるものだったので 1ファイルに数シートあった場合 全部のシートを読み出したいと思いました。 もしVBAマクロでの処理をご存知でしたら教えて頂けませんか? よろしくお願いいたします。

  • TK1961
  • ベストアンサー率35% (16/45)
回答No.1

 まず、ひとつのシートの限界は65,536行ですが、 この文章を読む限り、簡単に越えてしまいそうなのですが・・・?  ご質問の条件では、1ファイルのシートが平均3枚として43ファイル。2枚でも66ファイルで、限界が来てしまいますね。

cleverclober
質問者

補足

ありがとうございます。 確かにシート限界は知っています。 なので限界ギリギリのファイル数しか フォルダには入れないつもりです。 もしVBAマクロで対応出来るのをご存知でしたら 教えて頂けないでしょうか? よろしくお願いいたします。

関連するQ&A

  • EXCELで分かれたシート間の同一データ行を自動削除して結合したい

    EXCELで、シート1、シート2に分かれたデータがあります。 それぞれのシート間でC列~F列の値が重複している行、シート1側のG列の数値がマイナス になっている行を自動で削除してからデータを1つのシートに結合する方法を探しています。 条件は、シート1側の重複データ行のみを削除し、シート2側のデータが必ず残る方法であ る必要があります。G列のマイナス行を削除するのはシート1側のみです。 シート1がA列~I列、約3万行、シート2がA列~K列、約1千行くらいです。 シート2側のみJ列~K列(数値データが入っています)が存在しますが、シート1側は空欄です。 列の数は変わりませんが、行数が都度変動しますのでマクロでコピー先のセル位置を決め打ちする 事が出来ません。 1つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • エクセル複数ファイルを一つのシートに…

    エクセルのsheet1に縦に800個ほどのデータが並んでおります。それらのデータファイルが40個ほど一つのフォルダに保存されています。それらのデータを一つのエクセルのシートにまとめたいのですがどうしたらよいでしょうか?例えばA列にはブック1のデータB列にはブック2のデータというようにしたいのですが…

  • 複数CSVをエクセル複数シートに自動コピペ

    同じ形式のCSVファイル(計12)を一つのエクセルファイルの各12シートに コピペする作業を毎月行っています。 エクセルファイル・12個のCSVファイルは同じフォルダに保管していますが、 マクロ等を使って自動でコピペできる方法を教えて下さい。 ※現在、マクロを勉強中ですが、中々思うようなマクロが組めません…。

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • 複数のエクセルファイルからのデータの抽出、一覧の作成について

    エクセルでのデータ整理の件で以下の質問があります。 以下のことができるようなマクロは組めませんでしょうか? 同一フォルダ(仮に、「C:\Sample」とします)に日々の業務データが 入力されたエクセルファイルが300個ほどあります。 各ファイル内にはSheetが5枚あり、各ファイルで入力されているデータは すべて同一のフォーマットです(Sheet毎では異なる。 例えば、Sheet1の1行A列には日付データ、Sheet2の2-5行B列には名前データ、といった感じです)。 これら300個のファイルから、これまでのデータを一覧にしたリストを 新規に作りたいと考えています(作成場所はどこでも構いません)。 例えばSheet1の、1列目にはファイル名、2列目には各ファイルSheet1の1行A列の日付データ、 3-6列目には各ファイルSheet2の2-5行B列の名前データ・・・、といった具合です。 (縦に日付が並び、1行内に各ファイルのデータが入力されている、 といった風にしたいと考えています。) 参考になりそうな過去の回答もありましたので、いくつか試してみたものの、 うまくいきませんでした(私はマクロは少しかじった程度です)。 一個ずつコピペでは非常に骨が折れ、難儀しております。 ややこしい質問ではございますが、ご回答お待ちしております。

  • エクセルの各シートをアクセスで結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 空シートはありませんが、空白のセルはあります。 よろしくお願いします。

  • エクセルの各シートをアクセスで縦に結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 よろしくお願いします。

  • エクセルの各シートに複数のtxtファイルを取り込む

    Excel2013を用いたデータ整理をしているのですが,複数のファイルを扱う上でマクロを用いた効率化をしたいと思い,質問させていただきました. いま,Folder1 というフォルダに,text1 から text40 までの 40個のtxtファイルがあります. これらのファイルを,エクセル上であらかじめ作成してある Sheet1 から Sheet40 にそれぞれ貼り付けたいと考えています. txtファイルは,4列で構成されており,タブでそれぞれ区切られています. 行数は20,481行です. txtの中には,0 の値が入った箇所もあるため,その情報が消えないで貼り付けられると望ましいです. また,タブのところでしっかり区切られ,違うセルに貼り付けられると,ありがたいです. 質問は以上です. お手数ですが,よろしくお願いします.

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • エクセルマクロの質問です。

    例えば、A.xlsというファイルに01.csv,02.csv,・・・,20.csvといういくつかのファイルからデータを取り出すのですが、A.xlsのシート1の1列目に01.csvの1列目を貼り付けて、01.csvの2列目はA.xlsのシート2の1列目に貼り付けるようにシートをずらして行って、02.csvの1列目はA.xlsのシート1の2列目、02.csvの2列目はA.xlsのシート2の2列目というようにしたいのですが、どのようなプログラムがよいのでしょうか? エクセルマクロ初心者なので説明が不十分かも知れませんがよろしくお願いします。

専門家に質問してみよう