- ベストアンサー
複数ファイルを取り込んでデータを集計するマクロの作り方
- マクロを使って複数ファイルからデータを取り込み、作業中のブックに新しいシートとして追加する方法を教えてください。
- シートの数が異なる場合でも追加できるようにする方法についても教えてください。
- 追加されたシートのデータを集計する方法も教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sub macro1() Dim fs As Variant Dim s As Variant Dim w As Workbook fs = Application.GetOpenFilename(Title:="select xls(s)", MultiSelect:=True) If Not IsArray(fs) Then Exit Sub For Each s In fs Set w = Workbooks.Open(Filename:=s) w.Worksheets(1).Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Name = Application.Substitute(w.Name, ".xls", "") w.Close savechanges:=False Next Worksheets(1).Range("A1").Formula = "=SUM(" & Worksheets(2).Name & ":" & Worksheets(Worksheets.Count).Name & "!A1)" End Sub >複数ファイルを指定して 複数のファイルとは,具体的にどこにどんな風にあるのをどんな具合に指定したいのか,ヤリタイ事が書かれていません。 「マクロを載せたブックを同じフォルダにあるxlsファイルを拾い上げたい」 「実はフォルダの場所を指定して,そこにあるxlsファイルを拾いたい」 「実はエクセルブックじゃなくCSVファイルからデータを取りたかった」 etc,etc >取り込んだシートを 開いたブックのどのシートを取り込みたいのか,ヤリタイ事が不明です。 >取り込むシートの数は場合によって異なるので、何枚でも追加できるようにしたい 1冊のブックの複数枚のシートを指定したいという意味なのか,複数のブックの1枚ずつの指定をしたいという意味なのか,具体的な動きの流れが説明されていないのでどんな意味にもとれる >それぞれ名前をつけたい それぞれ具体的にどこから名前をとってきたいのか,何をしたいのか説明されていない 以上のような説明不足部分を改めて決めながらマクロを書いていくと,自然と形になっていくと思います。 >作り方を教えてください 88%のご相談者さんは作り方を聞くよりも,結局丸投げで誰かに書いて貰ったマクロをコピーさせてもらう方に飛びつきます。
その他の回答 (2)
- layy
- ベストアンサー率23% (292/1222)
シートをいくつ取り込むかわからないから集計の式も毎回変わってしまうというようなことで悩んでいるなら、いくつあっても集計はこのセルだ、ということを考えてみて下さい。 例えば、集計シート1番左、雛型シートは2番目、追加あれば右に増やして行く。雛型取り込み時と集計セルの関係は終わるまで固定です。 A+B=集計 A+B+C=集計 でなく 取り込む時に集計 集計=集計+A 集計=集計+B 集計=集計+C の考えです。
お礼
ありがとうございます。 lavvさんの回答をヒントに、なんとかファイル取り込み→集計まで完成することができました。 今回色々調べながら一人で作ることができたので、満足です。 しかし使い勝手の面でもう少し改善したい点があるのですが、こちらも不明点があるので、新しく質問を投稿してヒントを得たいと思います。 回答ホントにありがとうございました!
- layy
- ベストアンサー率23% (292/1222)
今の状態からだと取り込むのはそのまま雛型固定でよい。 雛型に取り込んだ直後にシートコピーしシート名もそこで変更します。次のデータも同じく雛型に取り込んで、変更、これの繰り返しでしょう。 集計は取り込みしながらやるか後で一気にやるか、どちらでもできる話です。 ここの何がわかりませんか?他シートの参照? プログラム設計する力を付けるようにがんばりましょう。答えを貰って実行だけでは上達遅くなります。
お礼
お礼が前後してしまい、また、遅くなって申し訳ありません。 つたない質問にも関わらず、回答ありがとうございました!
補足
>雛型に取り込んだ直後にシートコピーしシート名もそこで変更します。次のデータも同じく雛型に取り込んで、変更、これの繰り返しでしょう。 はい、その通りです! >集計は取り込みしながらやるか後で一気にやるか、どちらでもできる話です。 ここの何がわかりませんか?他シートの参照? 追加したシート数(取り込むファイル数)は場合によって異なるので、どうしたら良いのかが分かりません。。 >プログラム設計する力を付けるようにがんばりましょう。答えを貰って実行だけでは上達遅くなります。 仰るとおりです。。 ただ、今回マクロを作るのが初めてなので、今回は作っていただいたコードを読んで勉強するようにしたいと思います。
お礼
補足の箇所に書き忘れてしまったので、こちらに追記させていただきます。 お礼の蘭にもかかわらず、申し訳ありません。 指摘の通り、もう一度仕様を具体的に書き直します。 ●同じ雛型をコピーしたファイル同士の集計になります ●1つを集計用のファイルとして、そのファイルにマクロを作りたい ●取り込むファイルは フォルダの場所を指定して、そこにあるxlsファイルを拾いたい ●ファイルを1つを取り込んだら、続けてまた取り込むか確認してほしい ⇒yesならば、もう一度フォルダの場所を指定する ⇒noならば、ファイルの取り込みは終了 (面倒なら繰り返し手動で取り込みだけを行ってもOK) ●取り込むブックのシートは1枚で、そのシート名は全て同じ(仮に"実績") しかし集計用のファイルにも同じ名前のシートがあるので 取り込んだファイルのシートと区別できるようにしたい("実績A"や、"実績B"など) 取り込んだファイル名でもOKです ●"実績A"と"実績B"(追加されたシート)をそれぞれセルごとに集計(加算) した値を、集計用ブックの"実績"シートに入れたい ●ファイル取り込みマクロと集計マクロは分けた方が良い なんだか自分で書いてて、そんなこと出来るんだろうかという気になってきました…
補足
回答&指摘ありがとうございます! 確かに、作り方を教えていただくより、作ってもらった方がすごく助かります(>□<;) なので質問に追記しました。 ちなみに、keithinさんが作ってくださったマクロを実行させてみたところ、 取り込んだブックの名前がシート名になっていて感動しました。 これだと分かりやすいですね^^ 不明確な質問なのに作ってくださってありがとうございました!