• ベストアンサー

エクセルVBAをつかってフォルダ内のファイルの特定シートのデータを1つのシートにまとめる

はじめまして。 過去ログ検索しましたが、載っていないようなので投稿させていただきます。 ブックAがあるフォルダ内にある「○年*.xls」のさらに「○月(○月以外のシートもあり)」のシート内の特定のセル(範囲は固定されてます)の文字列を、全てブックAの1つのシートにまとめたいのですが、VBAにてこれは可能ですか? フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2000を使用しております。

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

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

ANo.4です。 セル範囲とは1セル(1行)だったのですね。 ならばエラーになりますね。 >Set r = r.End(xlDown).Offset(1) 1行ずつ移動させるのでしたら、 Set r = r.Offset(1) でよろしいかと。 ついでですが、 >If InStr(ws.Name, "*年*月*") Then で問題は出ていませんか? こちらではシートを見つけられずデータが貼り付きません。 If InStr(ws.Name, "年") * InStr(ws.Name, "月") Then このように致しました。

matyakin
質問者

お礼

返事が送れてすいません。 わざわざ本当にありがとうございます。 助かります。 セル範囲は複数です。 基本(A2:D30)の値のみを貼り付けられるように今現在色々と調べているところです。 ご丁寧にお答えいただきありがとうございました。

その他の回答 (5)

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

ANO.5です。 >セル範囲は複数です。 >基本(A2:D30)の値のみを貼り付けられるように 提示されたコードとの食い違いがありますが。。。 複数であればANo.5での変更は必要ないです。 或いは、 Set r = r.Offset(r.Rows.Count) ですか。 コードは貼り付ける位置がA1からですが、これが別のセルを基準となるのなら、 適宜修正願います。

matyakin
質問者

お礼

なかなかうごかなかったので、とりあえず一行で動かしてました。 ですが、おかげさまで全て貼り付けられるようになりました。 ここまで丁寧に教えていただいてなんとお礼を申し上げたらいいかわかりません。本当にありがとうございます。

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

ANo.3です。 >デバッグすると2周目の「Set r = r.End(xlDown).Offset(1)」で止まってしまうという意味です。 >「アプリケーション定義またはオブジェクト定義のエラーです」と表示されてしまいます。 提示された情報以外に何かあるのでしょうか・・・・? コードをどのように変更されたのか憶測がつきません。 可能であれば提示願います。

matyakin
質問者

補足

ほぼいじっていないですが・・・ Sub test() Dim wb As Workbook Dim ws As Worksheet Dim r As Range, rr As Range Dim fname As String Dim pname As String Application.ScreenUpdating = False '貼り付けるシート名は適宜変更 Set r = ThisWorkbook.Worksheets("Sheet2").Range("A1") pname = ThisWorkbook.Path & "\" fname = Dir(pname & "*年*.xls") Do Until fname = "" If InStr(fname, "年") Then Workbooks.Open Filename:=pname & fname Set wb = ActiveWorkbook For Each ws In wb.Worksheets If InStr(ws.Name, "*年*月*") Then Set rr = ws.Range("B2") '取り出したいデータ範囲 rr.Copy r Set r = r.End(xlDown).Offset(1) End If Next wb.Close False End If fname = Dir() Loop Application.ScreenUpdating = True End Sub こんな感じです。 もしかしたらパスやファイル名の指定に問題があるのかも・・・ ファイル名、シート名には法則があるので(ファイル名には「年」、シート名には「年.月」が必ず入ります)その辺は問題ないと思うのですが・・・。 何度もお手数おかけしてしまって申し訳ないです。

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

ANo.1です。 >>Set r = r.End(xlDown).Offset(1) >の(1)は消してもよかったんですよね?消さないと動かなかったもので・・・ 消していいものではありませんけど。 消すと貼り付けたデータの最終行に次のデータが貼り付いてしまい、 1行足りなくなります。 >あと、ちゃんと取り出したいデータを貼り付けてくれるのですが、全てA1に貼り付けされてしまい、 >結局最後に開かれたデータがA1に貼り付けられて終わってしまうのですが、このような場合はどうしたらよいでしょうか? 上記【Set r = r.End(xlDown).Offset(1)】がA1以降の行に順次貼り付けていくためのコードです。 検証した範囲では問題なく動いていましたが。。。

matyakin
質問者

お礼

ありがとうございます。 今はフォルダ内に2つの該当ファイル、両方とも該当シートが2つある状況でテストしています。 とりあえず、コードはそのまま(1)を消さずに動いていますが、どうしても2週目で止まってしまいます。 1週目はちゃんと貼り付けてくれるんですけどね・・・。 でもこんなに丁寧に解説してくれて本当に助かります。 ありがとうございます!

matyakin
質問者

補足

度々すいません。 デバッグすると2周目の「Set r = r.End(xlDown).Offset(1)」で止まってしまうという意味です。 「アプリケーション定義またはオブジェクト定義のエラーです」と表示されてしまいます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>過去ログ検索しましたが、載っていないようなので投稿させていただきます。 基本になる部分は過去ログでもエクセルのサンプルが載ったHPでも沢山あると思いますよ。 柔軟に利用できる知識があれば参考にして自力で基本部分は出来るはずです。 >フォルダ内のファイルが複数だったり、またそのファイル内の該当シートが1つだったり複数だったりで、かなり行き詰ってます。 どんな状態になっているのか解りませんが、文字列関数を利用してチェックすれば一定の選択は可能です。 条件から外れる場合はそれなりのチェックや抽出を行う仕組みにすれば良いでしょう。

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

Sub test() Dim wb As Workbook Dim ws As Worksheet Dim r As Range, rr As Range Dim fname As String Dim pname As String Application.ScreenUpdating = False '貼り付けるシート名は適宜変更 Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1") pname = ThisWorkbook.Path & "\" fname = Dir(pname & "*.xls") Do Until fname = "" If InStr(fname, "年") Then Workbooks.Open Filename:=pname & fname Set wb = ActiveWorkbook For Each ws In wb.Worksheets If InStr(ws.Name, "月") Then Set rr = ws.Range("A1:B5") '取り出したいデータ範囲 rr.Copy r Set r = r.End(xlDown).Offset(1) End If Next wb.Close False End If fname = Dir() Loop Application.ScreenUpdating = True End Sub ご参考まで。 (ブックを開かずにやる方法は苦手ですので、開いています。)

matyakin
質問者

お礼

早速ご回答いただきありがとうございます。 ブックは開いても全然問題ありません。 >Set r = r.End(xlDown).Offset(1) の(1)は消してもよかったんですよね?消さないと動かなかったもので・・・ あと、ちゃんと取り出したいデータを貼り付けてくれるのですが、全てA1に貼り付けされてしまい、結局最後に開かれたデータがA1に貼り付けられて終わってしまうのですが、このような場合はどうしたらよいでしょうか? 私も自分で調べてみます。 ご丁寧にありがとうございます。本当に助かります。

関連するQ&A

  • エクセルVBAで複数のファイルをひとつにまとめる

    はじめまして。 VBA初心者で恐縮なのですが、教えてください。   ブックAAAがあるフォルダ内に複数ある「***.xls」の全てのフイルのシート「A」内の特定のセル(A1:F30)の文字列を、全てブックAAAの1つのシートの特定の列(A:F)に重ねてまとめたいと思っています。 但し、シート「A」は非表示となっていて、また、「***.xls」のファイルは全て「ブックの保護」がかかっているため、シート「A」を表示させるためにはパスワードの入力が必要となります。 これをVBAを使って実行することは可能でしょうか。複雑で手に負えず行き詰っています。 どなたかご存知の方いらっしゃいましたらご教授願います。 エクセル2007を使用しております。  

  • 複数あるブックの特定シートの特定範囲を1つにしたい

    EXCEL2010を使用しています。 あるフォルダに格納されている複数のブックの、特定シートを、1つのシートにまとめたいです。 複数のブックの作りは同じです。 1つのブックに、複数シートがあり、"(配置)"というシートだけを、新規のシートにまとめたいです。 <今ある各ブック> ファイル名は、2014年度特定措置_●●.xlsで、●●だけ、ブック名が違います。 シート名が"(配置)"です。 c3セルに部署名が入っています。 b4セルからe10セルまで数式が入っています。 <行いたいこと> 新規のシートのa列に、各ブックにあるc3セルの部署名を持ってきたい。 b列からe列に、各ブックにあるb4セルからe10セルまでの数式を値張りし、取り込みたい。 以上です。 つたない説明で恐縮ですが、大変困っております。 どうか、ご回答の程、どうぞよろしくお願いいたします。

  • 複数のエクセルブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\データ解析\データ」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内のシート(シート名はファイル名と同じ)の「BO6からBW16までの□の範囲」で統一されています。 【抽出一覧作成イメージ】 ・「集計.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元BO6セルの値。以降,C列・D列と 順に値を入れていきたい。 ・BO6~BW16までのセル値を「集計.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • エクセル フォルダ内の.xlsファイルの集計

    エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。 作業としては あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む という形です。 その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。 実際には、 AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。 次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する これを当該フォルダに入っているファイル全てについて行う ※L2セルには「B」「C」以外の文字は入りません。 こういった作業ができればと思っています。 お時間のある方がおられましたら、ご教授いただけますでしょうか。 参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。 質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

  • ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出した

    ブックを開かずに、フォルダ内にある複数ブックの、特定セルの値を抽出したいのですが、やり方をご存じの方がいらっしゃったら教えてください。 フォルダ内には150個ほどエクセルファイルがあり、中身のシート名・フォーマットは同じなのですが、すべてファイル名が違います。 ファイルを開くことなく、これらのファイルの特定のシートの特定のセルにある値を、全て1枚の表にまとめることは可能でしょうか? フォルダ名 →"AGENDA_RIREKI" 参照したいファイル名 →ファイルによって異なる "#1111 AAA.xls"など 参照したいシート名→ "AGENDA" 参照したいセル→ "A7" と "E20~E70(E列のみ) データをまとめたいファイル名→ "AGENDA_matome.xls" データをまとめる時の形↓ (A列)          (B列)            (C列)        (D列) ファイル1のA7の値 ファイル1のE20の値  ファイル2のA7の値  ファイル2のE20の値                     E21の値                    E21の値                     ・                     ・                     ・     VBAは初心者です。。できればコードをそのまま拝借したいです。 お知恵を貸してください。よろしくお願いします。

  • 複数のExcelブックから特定シートの特定セル抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル値を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 よく似ている質問、回答を読んだのですが、私のレベルではとても応用できず質問させていただきます。 全く同じものがあれば、そのアドレスを回答いただくだけでも助かります。 【前提】 ・実行する端末のOSはWindows XP(SP3)、Excelは2003 ・対象フォルダはネットワーク接続フォルダ「\\share\target」  この中に、複数のExcelブックがあります。 ・抽出したい対象は、各ブック内の「概要」シートの「C3」セルで統一されています。 【抽出一覧作成イメージ】 ・「集約.xls」ブックの「Sheet1」の2行目から抽出した結果を一覧表示する。 ・表示はA列に抽出元ブック名(=ファイル名)、B列に抽出元C3セルの値。 ・C3セル値を「集約.xls」ブックの「Sheet1」に貼り付ける際には「値で貼り付ける」が望ましい。 というようなイメージです。 とても勝手なお願いではありますが、宜しくお願いいたします。

  • VBAを使い、同一フォルダにあるファイルの特定のシートの情報を取得したい

    はじめまして。 書籍や過去の質問等を調べましたが、類似するものを見つけられなかったため質問させていただきます。 Xというエクセルファイルで、Xと同一フォルダ内にある、ファイル名に特定の文字列(例えば「月報」)を含んだ全てのエクセルファイルの、特定の文字列(例えば「○年○月」)を含んだ全シートの、一定のセル範囲をひとつのシートにまとめたいと思っています。 X内のコマンドボタンで動かす予定ですが、複数のボタンになると自分では思っています(ボタンAでファイル名の取得、ボタンBでシートの取得、ボタンCでセルに貼り付け、みたいな感じで。ボタンの数は特に制限はないです) 要点としては a, 定定の文字列を含んだファイル名の取得 b, aで取得したファイル内の特定の文字列を含んだ全てのシート内の一定のセル範囲の取得(シートの数はファイルによる。必ずしも1つというわけではない。) c. bで取得した一定のセル範囲のデータを、1つのシートにまとめる。 あとはこれらのデータをtxtやcsvなどに出力できるようにするつもりです。 私がやってできたのは、同一フォルダ内にあるファイル名に特定の文字列を含むファイルの全てのファイル名を指定したセルに吐き出すことしかできませんでした。 なんか、ややこしい表現かもしれませんが、ご指導お願いします。 環境はxp、エクセル2003です。 よろしくお願いします。

  • VBA_フォルダ内複数のExcelファイルの集約

    Excel VBAに関する質問です。 特定のフォルダ内(例としてC:\folder1)の複数のExcelファイルにおける シート(例としてSheet1)内のセル範囲A2:I1000の情報をコピーし、 特定のフォルダ内に格納されたExcelファイル(例としてC:\tougou\tougou.xls)の シート(例としてTOUGOU)内のA2を起点に貼り付け処理をしたいのですが、可能でしょうか? <貼り付けイメージ> (例)特定のフォルダ内(例としてC:\folder1)のExcelファイル数が2つの場合 A2 B2 ・・・・・I2 ・ ・ ・ ・ ・ A1999・・・・・・I1999 A2~I1999の範囲にデータが集約される。 どうぞよろしくお願いいたします。

  • VBAで、excelファイルのマクロを実行したら、特定のフォルダのファ

    VBAで、excelファイルのマクロを実行したら、特定のフォルダのファイルの特定セルを確認し、その結果を反映する、というマクロを組みたいと思っています。 具体的には下記のマクロを組みたいと思っています。 ------------------------------------------------------ (1)マクロを組むファイル【worksheet】にてマクロを実行する (2)特定のフォルダのファイルのA1、A2、A3、A4の全てに”OK”という文字が入っているかを確認 ・C:\excel\1番\kakunin_1.xls にあるkakunin.xlsの、A1セルに”OK”という文字が入っていたら次はA2、A3、A4の順序で 確認する。 ・このとき、A1にOKと入っていて、A2には入っていなかった場合は、A2という文字を、【worksheet】のB1セルに結果を表示する ようにする。 ・特定のフォルダの構成は下記 C:\excel\1番\kakunin_1.xls |--\2番\kakunin_2.xls |--\3番\kakunin_3.xls ・上記の処理を、1番フォルダの【kakunin_1.xls】で実行し、【worksheet】のB1セルに結果を表示。 2番フォルダの【kakunin_2.xls】で実行し、【worksheet】のB2セルに結果を表示。 3番フォルダの【kakunin_3.xls】で実行し、【worksheet】のB3セルに結果を表示。 ------------------------------------------------------ VBAどころかプログラミング自体が初めてなので、例えば引数が何かも一々考えて1文ずつ読み込まなければいけない状態です。。 どなたかこの無知な自分に力を貸して頂けないでしょうか?

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

専門家に質問してみよう