• ベストアンサー

複数のエクセルファイルからデータ抽出とまとめる方法について。

500のエクセルファイルがあり、それぞれのエクセルデータのA2からF2までのデータのをまとめた一覧表(1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、という感じでです)のを、新しいエクセルファイルもしくはテキストなどにでも手早く作れる方法をご存知の方、ご教授ください。コピペでやっていますが嫌になってしまいました。。マクロも触っては見たのですが、2枚目のエクセルファイルを2行目に、3枚目のエクセルファイルを3行目になどの方法の解決は思いつかず、挫折しました。よろしくお願いいたします

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

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.4

対象のフォルダをcドライブの「sample」とした場合で回答します。 新規エクセルブックのシート名タブを右クリックし「コードの表示」 右側のエディタエリアに下記コードを貼り付け、実行して下さい。 G列にファイル名が入るようになっています。不要であれば Cells(rIdx, 7).Value = fName を削除して下さい。 Sub getA_F() Const myPath As String = "c:\sample\" Dim rIdx As Long Dim fName As String fName = Dir(myPath & "*.xls") Do Until fName = "" Workbooks.Open Filename:=myPath & fName rIdx = rIdx + 1 Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value Cells(rIdx, 7).Value = fName Windows(fName).Close fName = Dir Loop End Sub

keseran11
質問者

お礼

おかげさまで、一覧表を作ることが出来ました。有難うございました。 マクロ初心者なのでどれが定義語なのかわからず、こんな感じで解析させていただいてます。 Sub getA_F() getA_F()・・・?保留 Const myPath As String = "c:\sample\" myPath は文字列として定数扱いとする Dim rIdx As Long   Dim 変数宣言 Long  長整数型 rIdxは任意の文字 AAAでもかまわない Dim fName As String fnameは文字列として fName = Dir(myPath & "*.xls") Do Until fName = "" 保留 Workbooks.Open Filename:=myPath & fName rIdx = rIdx + 1 繰り返し作業定義 Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value (Cells(rIdx, 1), Cells(rIdx, 6))の範囲について開いたファイルの("A2:F2")で置き換え Cells(rIdx, 7).Value = fName (rIdx, 7)のセルにfName代入 ・・・・・ まだ半分以下もわからず、悪戦苦闘しております。 お世話になりました。

その他の回答 (4)

  • squip
  • ベストアンサー率16% (2/12)
回答No.5

path は、適切なフルパスに変更してください。 ファイル名は、1.xls、2.xls、... 500.xls と想定しています、これ以外の形式の場合は、filename を変更します。 シート名は、Sheet1 と想定しています、これ以外の場合は、postfix 内の対応する文字列を変更します。 定数を適切に変更して実行できたら、'// 注意 としている行の "A1:F2" を "A1:F500" に変更します。 上記内容がわからない場合、以下のコードは実行しない方がよいと思います。 Sub do_it()   Const path As String = "=""C:\Documents and Settings\Guest\My Documents\[""&"   Const filename As String = "ROW()"   Const postfix As String = "&"".xls]Sheet1'!R2C"""   Dim src As Range   Set src = Range("A1:F2") '// 注意   With src.Columns(1)     .FormulaR1C1 = path + filename + postfix     .FormulaR1C1 = .Value   End With   Dim it As Range   For Each it In src.Columns(1).Cells     it.FormulaR1C1 = "='" + it.Value   Next   src.Columns(1).AutoFill src   src.FormulaR1C1 = src.Value   Set src = Nothing End Sub

keseran11
質問者

お礼

有難うございます。No.4さんのマクロで手一杯でまだ分解解析を行えておりません。後ほどこのマクロからも勉強させていただきます。 私の質問にお答えいただき有難うございました。 ご厚意に厚く御礼申し上げます。

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

>また、ファイルは連番です。 >エクセルファイル1のA2-F2を、一覧表のA1-F1 エクセルファイル1.xls って事? それとも、1.xls って事? あとは、ANo.2さんのコメントをまず理解して下さい。

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

人間(質問者)がやっているときは、問題にならないが、プログラムでやると、すぐ問題になるのが、500のファイルをどういう範疇で選んでくる(指定する)かです。プログラムの経験が少ないようで、質問に書いてない。 例えば A.同一フォルダにある(それも対象外は含まれて無いか) B.ブックがあるフォルダが同一で名前が例えば共通文字列+連番になっているとか。 やりたいことは、各ブックのある決まったシート(これの名称等が同じなのかも書いてない)のA2:F2の6セルのデータを採って、 データ集約ブックの第1行目にセット。 次のブックのA2:F2をデータ集約ブックの第2行目にセットを繰り返す ということらしい。 必要なVBAのスキルは (1)フォルダ内のエクセル・ブックの名称を全て捉える。 場合によっては、対象外は捨てる。 (2)Openした・読み込んだあるブックのA2:F2を捉える(Copy) (3)データ集約ブックに貼り付けか値代入する。 (4)以上繰り返し。終了条件は。 質問者にとっては、丸投げ回答をそのまま使うならともかく、VBAでは荷が重いのでは。 そもそもVBAも経験無いのに500ものブックを作ったり、扱おうというのは、おかしいと思う。設計段階から、少ないブックに収まるよう考えるべきだ。エクセルは、そんなヘビーユーザーに適したサービスは考えられていない。

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

500のExcelファイルの一覧表は、同じシート名の同じ範囲にあるのですか? >1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、 1枚目のExcelファイルとは、1個目のファイル?複数シートの1番目?

keseran11
質問者

補足

有難うございます。 >1枚目のExcelファイルとは、1個目のファイル?複数シートの1番目? 複数シートではなく、複数のファイルになります。すべて同じフォルダに入っております。 また、ファイルは連番です。 一覧表は新規に作成して、 エクセルファイル1のA2-F2を、一覧表のA1-F1 エクセルファイル2のA2-F2を、一覧表のA2-F2 エクセルファイル3のA2-F2を、一覧表のA3-F3 ・・・・ にできればなと思っております。 言葉足らずになり申し訳ございません。 もしよろしければお知恵をお貸しください。

関連するQ&A