• 締切済み

VBAで複数エクセルシート内のセルを別シートに1つに統合

あるフォルダ配下に複数のエクセルがあります。 これを以下のように1つのシートに統合したいのです。 条件  科目名(A科目   B科目  C科目)のタイトル部分は不要  フォルダ配下にあるすべてのエクセルファイルを統合したい。  (ファイル数はいくつあるかは毎回異なるので、直接ファイルを指定する方法はできない。フォルダ指定したい。) <1.xls>  A科目   B科目  C科目 390,200  426,200  801,600 <2.xls>  A科目   B科目  C科目 140,500  333,200   1,400 ↓ <統合.csv> 390,200  426,200  801,600 140,500  333,200   1,400 以上よろしくお願いいたします。

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

非常に大雑把な質問なのでこちらで勝手に以下の前提として回答します。 フォルダー内の集計される各ファイルのシート数は不定。 各シートのABC列2行目以降にデータが配置されている。 各シートのデータ行数は不定。但し、ABC各列の行数は同一とする。 このマクロを記述するエクセルは、同じフォルダー内にある別BOOKとする。 このマクロを記述するエクセルの集計するシート名はSheet1とし、ABC列に集計する。 集計後に作成される「集計.CSV」ファイルの格納先は自分でダイアログから指定する。 Sub Test() Dim fn, wb, x, i, n, sh, myPath myPath = ThisWorkbook.Path & "\" fn = Dir(myPath & "*.xls") '選択したフォルダ内のExcelファイルを検索します Do Until fn = "" '全て検索し終えると、fn = Empty となるので、その間以下を実行します If fn <> ThisWorkbook.Name Then 'ファイルが自分以外なら Set wb = Workbooks.Open(myPath & fn) '選択したファイルを開きます For Each sh In wb.Worksheets '各シートごとに x = sh.Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 For i = 2 To x '2行目から最終行まで以下を実行します n = n + 1 With ThisWorkbook.Sheets("Sheet1") '転記 .Cells(n, 1) = sh.Cells(i, "A") .Cells(n, 2) = sh.Cells(i, "B") .Cells(n, 3) = sh.Cells(i, "C") End With Next i Next sh wb.Close (False) '選択したファイルを閉じる End If fn = Dir() '次のファイルを検索 Set wb = Nothing Loop '繰り返し ThisWorkbook.Sheets("Sheet1").Copy Application.Dialogs(xlDialogSaveAs).Show Arg1:="統合.csv", Arg2:=6 End Sub

関連するQ&A

  • VBA シート指定の結合

    あるフォルダ配下に複数のエクセルがあります。 これを以下のように1つのシートに統合したいのです。 >For Each sh In wb.Worksheets を >For Each sh In wb.Worksheets("Sheet2") としましたが,エラーで動きませんでした。 いろいろやってみたり調べましたが頓挫しております。 よろしくお願い致します。 条件  科目名(A科目   B科目  C科目)のタイトル部分は不要  フォルダ配下にあるすべてのエクセルファイル内のある特定のシートの内容を統合したい。シート名は共通のものをつけています。 (ファイル内の全てのシートを結合する方法は分かったのですが,ある特定のシートを指定しての統合ができません。) <1.xls> (sheet1)  A科目   B科目  C科目 390,200  426,200  801,600 (sheet2)  A科目   B科目  C科目 5,000   6,000  7,000 <2.xls> (sheet1)  A科目   B科目  C科目 140,500  333,200   1,400 (sheet2)  A科目   B科目  C科目 8,000   9,000   10,000 ↓ <統合.csv> 390,200  426,200  801,600 140,500  333,200   1,400 *以下,現在までにできたVBA Sub Test() Dim fn, wb, x, i, n, sh, myPath myPath = ThisWorkbook.Path & "\" fn = Dir(myPath & "*.xls") '選択したフォルダ内のExcelファイルを検索します Do Until fn = "" '全て検索し終えると、fn = Empty となるので、その間以下を実行します If fn <> ThisWorkbook.Name Then 'ファイルが自分以外なら Set wb = Workbooks.Open(myPath & fn) '選択したファイルを開きます For Each sh In wb.Worksheets '各シートごとに x = sh.Cells(Rows.Count, 1).End(xlUp).Row '最終行取得 For i = 2 To x '2行目から最終行まで以下を実行します n = n + 1 With ThisWorkbook.Sheets("Sheet1") '転記 .Cells(n, 1) = sh.Cells(i, "A") .Cells(n, 2) = sh.Cells(i, "B") .Cells(n, 3) = sh.Cells(i, "C") End With Next i Next sh wb.Close (False) '選択したファイルを閉じる End If fn = Dir() '次のファイルを検索 Set wb = Nothing Loop '繰り返し ThisWorkbook.Sheets("Sheet1").Copy Application.Dialogs(xlDialogSaveAs).Show Arg1:="統合.csv", Arg2:=6 End Sub

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • エクセルで複数シートからデータを統合したグラフを作る

    エクセル2000を使用しています。 複数のシートの表からデータを統合したグラフを作りたいのです。 たとえば シート1:A 12 B 5 C 7 シート2:A 10 B 5 C 4 というデータから シート3で2つの表を統合したグラフ(たとえば積層グラフ:A  12と10  B・・・)をつくりたい。 但し、表は1つには統合しません。 また、データはそれぞれで、合計ではありません。 データの範囲の指定の仕方がわかりません。(たぶんここでは?) 

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • EXCELで別ブックのセルを参照 シートを替える

    EXCEL初心者です。 毎日四苦八苦しているのですが、行き詰ってしまったのでご教授ください。 使用しているブックをA.xlsとして、 別ブックB.xlsのセル参照を、 ='Z:\[B.xls]Sheet1'!$B$1 のようにしています。 この Sheet1 の部分のシート名をA.xlsの、例えばA1に入力することで、 毎回シート名を変えられるようにしたいのですが、 ='[B.xls]( ココ )'!$B$1  ココの部分をどのようにしてよいかがわかりません。 A.xlsのパス名から書けばよいのかなと思ったのですが、 どうもうまくいきません。 何分必要にせまられてEXCEL勉強し始めたばかりです。 初歩的な質問ですが、すみません、よろしくおねがいします。

  • Excelで他Excelファイルのセルの値をVBAで参照したい時

    こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!

  • 【2003】VBA 別ファイル特定シートへのコピペ

    下に書いてあるようなことをしたいのですが、勉強するのも初めてで 現段階の自分の知識ではどうにもなりません。 一応、自力でできたのはフォルダ内の.xlsファイルがなくなるまですべて開くというとこだけでしょうか・・・ お手数かけますが、ご教授お願いします。 参照するシートやファイルは既に存在しているものとします。 <固定値> C:\blue\red\ 'ここをカレントディレクトリと呼ぶ C:\yellow         '集計ファイルはこのディレクトリに置いてある' C:\yellow\集計_2011.xls <ファイル配置> カレントディレクトリ配下にはデータファイルがn個入っている。 1_data.xls 2_data.xls 3_data.xls ・ ・ <数字>_data.xls ◆マクロの動作内容 (1)C:\yellow\集計_2011.xlsが開かれていない場合はファイルを開き 既に開いている場合は(2)へ進む。 (2)カレントディレクトリ配下の*_data.xlsファイルを開く (3)開いたファイルのシート名「Second」を開き、セルC5を参照する (4)下記の通り分岐する((3)の結果) C5=one ならば yellow\集計_2011.xlsのシート名「English」を選択 C5=eins ならば yellow\集計_2011.xlsのシート名「German」を選択 C5=un ならば yellow\集計_2011.xlsのシート名「French」を選択 (5)dataファイルのA6を起点とし、下記の範囲をコピーする 行:A6~(上から数えて最後に空白でないセルA*) 列:A列からZ列まで →A6:Z*の範囲をコピー(これを#とする) (6) #をyellow\集計_2011.xlsに追記形式でコピペする →(4)で選択したシートに貼り付ける →貼り付けるセルは、B10を上から数えて最初に空白のセルを起点として、#を貼り付ける (7)開いていたdataファイルを閉じる (8) カレントディレクトリのdataファイルがすべてに(2)から(7)を繰り返す

  • エクセル:別ファイル別シートのセル参照

    エクセルで別ファイルの別シートのセルを表示しようとしています。 例えば、「ABC.xls」のファイルで、この中のシート「DEF」のセル「A1」を表示するとします。「ABC.xls」はc:\に存在しているものとします。 この場合は   ='C:\TEMP\[ABC.xls]DEF'!A1 となります。 わからないのは「ABC.xls」が「ABCyyyymmdd.xls」の場合です。yyyymmddはシステム日付です。 申し訳ありませんが、だれか教えて下さい。

  • EXCEL 別のファイルからシート抽出をしたい

    お世話になります。 業務上、毎日、EXCELファイルが作成されます。 (1.xls、2.xls、3.xls・・・というように、毎日段々と増えていきます) それとは別のEXCELファイルを一つ作成して、次のことをしたいと思っています。 ・1.xls、2.xls、3.xls・・・のように、複数あるファイルの中から、一つのファイル、シートを指定し、  シートの内容をそのまま抽出したい。(なお、抽出したいシートの名前は毎回違います) よろしくお願いします。

  • 別excelのデータを引き出す時に、そのexcel名称を可変にしたいと思っています。

    別excelのデータを引き出す時に、そのexcel名称を可変にしたいと思っています。 なるべくマクロを使わないで出来るでしょうか? 例: =VLOOKUP(A1,[B.xls]Sheet1!$A$1:$E$10,4,FALSE) という関数を指定したとします。 [B.xls]Sheet1 この部分をセルA1に入れて、内容を変更することで 引き出し元のファイル&シートを変えたいと思っています。 つまりA1のセルの値を[C.xls]Sheet2にすることで、C.xlsファイルのSheet2からデータを引っ張って来たいのです。 出来るでしょうか? ご存知の方いらっしゃいましたら、宜しくお願い致します。 環境は OS:WINDOWS98 EXCEL2000 です。

専門家に質問してみよう