• ベストアンサー

複数のシートをもつ複数のエクセルファイルのデータ合成(各Sheet毎に)

4つの「Sheet」があるエクセルファイルが100個ほどあります。すべて同じ書式のデータです。それぞれの「Sheet」ごとに、データを合成したいのですが、簡単な方法がありませんでしょうか。簡単に言えば、「Sheet」毎のデータの合成です。例えば、100個のエクセルファイルの「Sheet1」の情報を一つのシートに、「Sheet2」の情報を別途のシートに合成するという具合です。かなり困っています。できれば無料でできる方法を教えて頂ければ幸いです。よろしくお願いします。

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

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

それぞれのファイルの中のシート名が同じなら、次のマクロを使ってください。例として、Sheet1~Sheet4を「研究」、「調査」、「報告」、「会計」というシート名ということにしています。マクロの下の部分を適当に書き換えて下さい。 MySheet(1) = "研究" MySheet(2) = "調査" MySheet(3) = "報告" MySheet(4) = "会計" Sub DataCollection() Dim MySheet(4) As String filepath = "D:\work" Databook = ActiveWorkbook.Name Application.DisplayAlerts = False Application.ScreenUpdating = False MySheet(1) = "研究" MySheet(2) = "調査" MySheet(3) = "報告" MySheet(4) = "会計" i = 1 Do While Not (IsEmpty(Workbooks(Databook).Sheets("Sheet5").Cells(i, 1)))   Mybook = Workbooks(Databook).Sheets("Sheet5").Cells(i, 1)   If Mybook <> "Data.xls" Then     Workbooks.Open filepath & "\" & Mybook       For j = 1 To 4         'シート1:4列(A-D)42行、利用(合成)したいデータは、D4:D42         If j = 1 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets(MySheet(j)).Select           Range(Cells(4, 4), Cells(42, 4)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets(MySheet(j)).Select           Cells(65536, 4).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If         'シート2:19列(A-S)161行、利用(合成)したいデータは、E3とB8:S10         If j = 2 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets(MySheet(j)).Select           Range(Cells(3, 5), Cells(3, 5)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets(MySheet(j)).Select           Cells(65536, 5).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial                    Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets(MySheet(j)).Select           Range(Cells(8, 2), Cells(10, 19)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets(MySheet(j)).Select           Cells(65536, 5).End(xlUp).Offset(1, -3).Select           ActiveCell.PasteSpecial         End If         'シート3:35列(A-AI)303行、利用(合成)したいデータは、A4:AI303         If j = 3 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets(MySheet(j)).Select           Range(Cells(4, 1), Cells(303, 35)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets(MySheet(j)).Select           Cells(65536, 1).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If         'シート4:13列(A-M)1003行、利用(合成)したいデータは、A4:M1003         If j = 4 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets(MySheet(j)).Select           Range(Cells(4, 1), Cells(1003, 13)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets(MySheet(j)).Select           Cells(65536, 1).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If       Next     Workbooks(Mybook).Close False   End If i = i + 1 Loop Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

dream-boat
質問者

お礼

できました。ありがとうございました。助かりました。一時はどうしようかと本当に悩んでました。期日に間に合いそうです。本当にありがとうございました。

その他の回答 (7)

回答No.8

書き忘れました。 さきほどのマクロを貼り付けたファイルのSheet1~Sheet4も「研究」、「調査」、「報告」、「会計」というようにシート名をかえてから、実行して下さい。

回答No.6

以下を試してみてください。 1.合成したいファイルをすべて一つのフォルダに入れて下さい。Dドライブのworkというフォルダに入れることを前提にマクロは組んでいます。他の場所で行う場合はマクロに2箇所あるfilepath = "D:\work"の部分を書き換えて下さい。 2.次に新規でエクセルのファイルを開いて、ワークシートを2つ追加してSheet1~Sheet5までを用意してください。 3.下のマクロを標準モジュールにコピペして下さい。合成したいファイルがあるフォルダと同じ場所に保存してから、もう一度開いて下さい。 4.[ツール]-[マクロ]-[マクロ](または[Alt]を押しながら[F8]を押して)からFileListingのマクロを選択して実行します。Excel2003までだと65536行しかありませんので、シート4にあるデータは1ファイル1000行あると100ファイルのデータを合成することはできませんので、Sheet5にあるファイル名を減らす必要があります。 5.Sheet5にあるファイルの順番に追記されますので、必要があれば、ソートして下さい。 6.DataCollectionのマクロを実行すれば、Sheet1~Sheet4に合成されたデータが書き込まれます。 わかりにくかったらまた質問してください。 Sub DataCollection() filepath = "D:\work" Databook = ActiveWorkbook.Name Application.DisplayAlerts = False Application.ScreenUpdating = False i = 1 Do While Not (IsEmpty(Workbooks(Databook).Sheets("Sheet5").Cells(i, 1)))   Mybook = Workbooks(Databook).Sheets("Sheet5").Cells(i, 1)   If Mybook <> "Data.xls" Then     Workbooks.Open filepath & "\" & Mybook       For j = 1 To 4         'シート1:4列(A-D)42行、利用(合成)したいデータは、D4:D42         If j = 1 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets("Sheet" & j).Select           Range(Cells(4, 4), Cells(42, 4)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets("Sheet" & j).Select           Cells(65536, 4).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If         'シート2:19列(A-S)161行、利用(合成)したいデータは、E3とB8:S10         If j = 2 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets("Sheet" & j).Select           Range(Cells(3, 5), Cells(3, 5)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets("Sheet" & j).Select           Cells(65536, 5).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial                    Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets("Sheet" & j).Select           Range(Cells(8, 2), Cells(10, 19)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets("Sheet" & j).Select           Cells(65536, 5).End(xlUp).Offset(1, -3).Select           ActiveCell.PasteSpecial         End If         'シート3:35列(A-AI)303行、利用(合成)したいデータは、A4:AI303         If j = 3 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets("Sheet" & j).Select           Range(Cells(4, 1), Cells(303, 35)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets("Sheet" & j).Select           Cells(65536, 1).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If         'シート4:13列(A-M)1003行、利用(合成)したいデータは、A4:M1003         If j = 4 Then           Workbooks(Mybook).Activate           Workbooks(Mybook).Sheets("Sheet" & j).Select           Range(Cells(4, 1), Cells(1003, 13)).Copy           Workbooks(Databook).Activate           Workbooks(Databook).Sheets("Sheet" & j).Select           Cells(65536, 1).End(xlUp).Offset(1, 0).Select           ActiveCell.PasteSpecial         End If       Next     Workbooks(Mybook).Close False   End If i = i + 1 Loop Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub Sub FileListing() Dim ws As Worksheet filepath = "D:\work" Sheets("Sheet5").Select With Application.FileSearch   .NewSearch   .LookIn = filepath   .Filename = "*.*"   .SearchSubFolders = True   If .Execute() = 0 Then     End   Else     For 検索結果 = 1 To .FoundFiles.Count       Cells(検索結果, 1) = .FoundFiles(検索結果)       i = Len(filepath)       Cells(検索結果, 1) = Mid(Cells(検索結果, 1), i + 2, 200)     Next   End If End With End Sub

dream-boat
質問者

補足

ありがとうございます!ほんとにありがとうございます。試みてたのですが、「インデックスが有効範囲にありません」と表示され、「Workbooks(Mybook).Sheets("Sheet" & j).Select」の部分が黄色くなります。"Sheet"の部分の表記を変えたりしたのですが、状態が変わりません。各Sheetに名前をつけていることが原因でしょうか?知識不足に加え、不慣れなもので本当にすみません。自分なりにも頑張って解決を試みてみます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

>シート4:13列(A-M)1003行、利用(合成)したいデータは、A4:M1003 >エクセルファイルが100個ほどあります。 約1000行を100ファイルから読み込むと言うのなら、 Excelのバージョンは2007でしょうか?

dream-boat
質問者

補足

Excelのバージョンは2003でも2007でもどちらでも使うことができます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

大げさに難しい言葉で「データ合成」なんていうから、何かと思っちゃう。そんなエクセルの「用語」は無いですよ。 これは理論的には手作業でやれるが、手間がかかったり、根気が続かないだけ。こういうパターンの課題は、コンピュタにやらせる、すなわちVBAでやらすより他にない。100ブックもエクセルで扱おうとするのは、VBAでもやれないと、運用できないと思う。 1つ2つのシートを人手作業して、マクロの記録をとり、連続して、人の目と手が無くてもできるようにするには、コードのどこをどう変えたら良いのか、まず文章で書き出してみて、各々が1つの課題になるだろうから、それを本やWEBや質問で1つ1つつぶしていくことです。 できない点も明確になってない丸投げなぞ、回答者に甘えすぎ。

dream-boat
質問者

お礼

ご指摘頂いた通りです。本来なら1つ1つ克服していくべきなのですが、時間がなかったためアドバイスを頂戴できればと思い、質問させていただきました。すみません。できる限りがんばってみます。

回答No.3

合成というのは各ファイルのShee1のデータを追記するだけでいいのでしょうか?No1のファイルのSheet1のデータの下にNo2のSheet1のデータを書き足していくと理解したらいいですか? ファイル名はどうなっているのでしょう?規則的なファイル名なのでしょうか?それとシートにどのようにデータが入力されているか(何列で何行なのか、どのセルに入力されているかなどです)がわからなければ、VBAでする方法を示すことができません。できれば補足をお願いします。

dream-boat
質問者

補足

合成というのは各ファイルのShee1のデータを追記するだけでいいのでしょうか?No1のファイルのSheet1のデータの下にNo2のSheet1のデータを書き足していくと理解したらいいですか? →大体その通りです。シート1に関してはNo1のファイルのSheet1のデータの横にNo2のSheet1のデータを書き足していければベストです。勝手な願望でしかありませんが。説明不足で申し訳ありません。 ファイル名は2007○○××といった具合に規則的です。「○○」の部分は完全に同じ名称で、「××」の部分はファイルによって異なります。 各シートのデータは以下の通りです。 シート1:4列(A-D)42行、利用(合成)したいデータは、D4:D42 シート2:19列(A-S)161行、利用(合成)したいデータは、E3とB8:S10 シート3:35列(A-AI)303行、利用(合成)したいデータは、A4:AI303 シート4:13列(A-M)1003行、利用(合成)したいデータは、A4:M1003 ややこしい表記の仕方ですみません。 ファイルごとに記入されているデータの量は異なりますので、おおよそです。データは数値及びテキストが混ざってます。 VBAの使い方がよく分からず、困惑してます。どのようにすればいいか検討がつかず、悩んでいます。 アドバイス頂ければ幸いです。 よろしくお願いします。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.2

データの同一フィールドにおいて、一方のデータを他方のデータの下に結合するような方法であれば、シート毎、ファイル毎ともにVBAでできます。 簡単な方法とのことですが、この手の処理はマクロの記録だけではできません。ただ、無料ではできます。

dream-boat
質問者

お礼

ありがとうございます。一度試してみます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

合成とは、 ・数値データの集計を行なう事? ・単にデータを下に追加して行く事? >できれば無料でできる方法を教えて頂ければ幸いです。 VBAを勉強して自作する。

dream-boat
質問者

補足

回答ありがとうございます。 データ合成は、単にデータを下に追加して行く事です。 VBAの勉強を試みているのですが、なかなか理解できなくて。すみません。

関連するQ&A

  • 複数のエクセルファイルのシートを1枚のシートに

    100個以上のエクセル(CSV)ファイルの1枚目のシートに同じ書式のファイルが多数(100個程度)有るのですが、これを1枚のシートにまとめる方法は無いのでしょうか? 一枚のシートの行数は数行~50行以下で、全部のデータを1枚に纏めてデータ処理したいのですが、一括は無理でも出来るだけ簡単に出来る方法をお願いします。 尚、当方VBAは不得手で、あまり長いと(長くなくても)動くまでの試行錯誤の手間ひまで100枚のファイルのシートへのコピペが終わってしまう程度の実力ですので、ご配慮?お願い致します。

  • 複数のエクセルファイルとシートからデータ抽出したい

    すみませんが教えてください! 複数のエクセルファイルがあり、それぞれに複数のシートがあります。 (ファイルによってシート数は異なります) そのすべてのファイル/シートから、C列の最後の行のデータを抽出し、集計ファイルに書き出したいのです。 書き出しのフォーマットは3セル使用して、ファイル名、シート名、データとしたいです。 すみませんが、よろしくお願いいたします。

  • エクセル複数のファイルの複数のシートをアクセスのクエリで検索したい。

    よろしく御願い致します。 エクセルの複数のファイル(5ファイル)に各々10から20ぐらいシートがあります。 シートは全て同じ書式で、データの内容は、納入品の納入日・品名・数量・単価・仕入れ業者です。 全てのシートの内容をアクセスのクエリで検索をしたいです。 シートの数はこれから増える可能性があります。 アクセスは初心者です。 おわかりの方がいらしましたら、どうぞ教えてください。

  • 複数のExcelファイルにある同名シートを1つのシートに一括でまとめるには?

    フォルダの中に複数のExcelファイルがあり、それぞれのExcelファイルには「All」という名前のシートが存在します。そこで、複数ファイルにあるこのシートのデータをすべて1つのシートにまとめたいと思います。具体的には、「合体.xls」というExcelファイルからマクロを実行し、「合体.xls」に存在する「pAll」という名前のシートにシート「All」の全データを入れたいです。どのようにすれば実現できますか?

  • エクセルで複数の書式データをまとめたい

    現在、エクセルで複数のファイルがあります。 書式のデザイン等はみんな一緒なのですが、 中のデータはすべて違うので、よくある「統合」などとは 意味が違ってくるのですが、そのデータを 一つにまとめて活用したいのです。 一つにまとめるのはもちろんエクセルファイルでまとめる事が できれば問題ありません。 もし可能であれば方法を教えていただければと思います。 よろしくお願いします。

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

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

  • 複数のエクセルファイルからデータを抽出してリスト化

    あるフォルダ内(C¥sample)内に複数のエクセルファイルがあり(ファイル名はばらばら)、そのファイル全てに「報告書1」というシートが存在します。その「報告書1」というシート内のデータをまとめた一覧表を新規エクセルファイルに作成したいと思っています。 1つ目のファイルの報告書1シートのA2~F5のデータを一覧表エクセルA2~F5まで貼付け、2つ目のファイルの報告書1シートのA2~F5のデータを一覧表エクセルA6~F9まで貼付けという具合にまとめていきたいです。マクロで簡単にひとまとめにするいい方法はありませんでしょうか。ご教授お願いいたします。 例)報告書1シート A B     C      D     E    F 1 受付  支店    受注先    品物   数量  金額 2 0001 北海道   ●●      リンゴ    1   100 3 0002   北海道   ●●      リンゴ    2 200 4 0003   東北    ▲▲      みかん   1 150 5 0004   東北    ▲▲      みかん   2 300

  • エクセル マクロ 複数ファイルを1枚のファイルに

    お世話になります。 私の業務で、多数のエクセルシートを1つのファイルにまとめ、 その上で縦串を通して合算を出す、という作業が頻発しております。 様々な資料で同様の作業が行われますので、簡素化ができればと思い、 質問させていただきます。 [作りたいマクロ] 『元データ』のフォルダに入っているエクセルファイルの 『指定シート(仮にA2セルにシート名を指定できるものとします)』を、 当マクロの入ったエクセルファイルにシートを追加したい。 その際、全てのシート名が同一になってしまうので、 『指定したセル(仮に各シートのB2セル)』をシート名にする。 ●各シートは全て同じフォーマットですので、書式等そのままコピーでOKです ●元のファイル名はバラバラになっていることが多いです

  • 複数のエクセルファイルを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】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • 複数のエクセルファイルを1つにまとめたい

    定型書式のエクセルデータが数百あります。 その複数のファイルを1ファイルにまとめたいのです。 コピー&ペーストを繰り返すのではなく、簡単にできる方法がありますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう