エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。
作業としては
あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む
という形です。
その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。
実際には、
AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。
次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する
これを当該フォルダに入っているファイル全てについて行う
※L2セルには「B」「C」以外の文字は入りません。
こういった作業ができればと思っています。
お時間のある方がおられましたら、ご教授いただけますでしょうか。
参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。
質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。
No.1ベストアンサー
- 回答日時:
集計するんじゃなくて,単純に転記して並べていくだけですね。
つぎのようなごく基本的なマクロを組み合わせて,応用をしていくだけの作業です。
1.ブックを次々調べて巡回するdir関数の使い方
2.見つけたブックを開く方法
3.開いたブックから値を引き出す方法
4.転記先を適切に設定する方法
などの手段について,VBAのヘルプやヘルプに書いてある使用例などを見ながら理解してください。
手順:
集計ブックを用意し,AAA.xlsやBBB.xlsが入れてあるフォルダに一緒に放り込んでおく
集計ブックに次のマクロを用意して実行する
sub macro1()
dim myPath as string
dim myFile as string
dim i as long
dim w as workbook
dim n as long
dim s as variant
’準備
thisworkbook.worksheets(1).range("B:C").clearcontents
thisworkbook.worksheets(1).range("B2:C2") = array("B","C")
mypath = thisworkbook.path & "\"
n = 3
’そこにあるブックを調べる
myfile = dir(mypath & "*.xls*")
do until myfile = ""
if myfile <> thisworkbook.name then
’開いて調査する
set w = workbooks.open(filename:=mypath & myfile)
for i = 3 to w.worksheets.count
s = w.worksheets(i).range("L2")
if s="B" or s="C" then
thisworkbook.worksheets(1).cells(n, s) = w.worksheets(i).range("D4").value
n = n + 1
end if
next i
w.close savechanges:=false
end if
myfile = dir()
loop
end sub
この回答への補足
早速のお返事ありがとうございます。
私の書き方がよくありませんで、誤解を招いてしまいました。
「B」というのは文字であり、セルの列を表すわけではありませんでした。たとえば「東京」と同じ感じです。(同様に「C」も「大阪」のような文字として考えておりました。)
でも、ご教授いただいたコードを参考に変えてそこはクリアできました。
あともう一つ、単純に転記するわけじゃなく集計するマクロを考えております。
ですので、
・AAA.xlsというファイルの各シートのうち、L2セルが「東京」のシート(複数あるとする)のD4セルの数値を集計して集計ブックのB3セルに出力する。同様に、L2セルが「大阪」であるシートのD4セルの合計値を集計ブックのC3セルに出力する
・BBB.xlsのファイルについても同じように処理し、それぞれB4・C4セルに出力する
といった処理を考えておりました。
しかしながら、なんとなく私の今のスキルでは無謀なことに挑戦しているようですので、ひとまず独力でやってみたほうがいい気がしてきました。
上記コードは大変勉強になりました!ありがとうございました。
No.2
- 回答日時:
VBAをはじめて間もないようなのに、こういうブックをまたいだ課題をこなすのは無理があると思う。
ブックーシートーセルのオブジェクトの階層関係などもわかってないのでは。
>あるフォルダに複数の.xlsファイル・・
のブックの名前をとらえるのは、よく出る質問である。
Googleででも「フォルダ ファイル 捕まえる」ででも照会すれば、沢山記事があり(100万?)その中にはコード例が出る記事も在る。
勉強のこと。
ーー
1つのブック名が決ると、そのブックを開くコードを勉強する。
ブックを開かないとシートデータは取れないと心得ること。
ーー
またはエクセルブック名が20ぐらい以下の数で、増減しないなら、ブック名を文字列でプログラムの中で指定する方法もある。
シートのセルに対象データ元のブック名を指定する方法もある。
標準の方法を追求・実現するのでなく、コーディングのやさしい方法で、当面凌ぐ手も考えないと実際問題前に進まない。
ー
そして望みのブックの、望みのシートの、望みのセルの計数のとらえ方の勉強が必要だが、それは
モデル的に1つのデータ元ブックと集計ブック(1つのブック固定)を開いて、データ転記などして、マクロの記録を取ってコードがどうなるか、勉強してみたら。
そのままでは完成しないが、データの取り方などはわかるだろう。
そこぐらいはやった上で質問を改めてやるべきだ。
ーー
似た件の別件だが、1ブックの複数シートのB4セルの値を足しこんで、合計を出すコードなどわかるのか。
ーー
>L2セルに「B」と記述があれば別ブックのB3セルに・・
これなど、VBAを少し判っていれば、書くまでも無いこと。IF文を使って、場合をBとCの場合に分けたら仕舞い。
何処が本題で難しいか、判ってないか、在るセルの集計のコードさえも、判らないのかこころもとない。
ーーー
VBAについては、丸投げするコーナーではない。もっと簡単なケースからやっていかないと丸投げになるだろう。回答のコードの意味の理解も出来ないだろう。
勉強不足で申し訳ございません。やはり大それたことを実現しようとしていたのですね。
総計が、結局50ぐらいのブックになりそうなので(また、状況に寄りブック名を私の側で固定することが出来かねる状況です)、keithinさんのコードを参考に独力で頑張ってみたいと思います。
マクロ記録を取って…というのは確かに試しておりませんでした。至らなさに反省するばかりです。
VBAの本をきっちり読んで勉強していきたいとおもいますので、勘弁してください。
やはりブックをまたぐということで最初からわからないと決めつけてかかっていたのかもしれません。今後質問はせずに自力で頑張ります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- Excel(エクセル) セルの値からファイルを複数作りたい 2 2022/10/06 12:42
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBAで別ブックのシートを指定し...
-
VBA シート名が一致した場合の...
-
ACCESSVBA からExcelの他ブック...
-
VBS Bookを閉じるコード
-
別ブックをダイアログボックス...
-
Excel-VBAでのファイルの開き方
-
VBA 別ブックからコピペしたい...
-
【VBA】全シートの計算式を全て...
-
【マクロ】違うフォルダにある...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルマクロで任意のファイ...
-
VBA 実行時エラー 2147024893
-
[Excel]ADODBでNull変換されて...
-
現在開いているbook全てを対象...
-
拡張メタファイルにて貼り付け
-
【ExcelVBA】インデックスが有...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
vbaでvbaProjectのパスワード解...
-
VBA コードを実行すると画面が...
-
【マクロ】アクティブセルにブ...
-
Excelのマクロについて教えてく...
-
VBAで別のブックにシートをコピ...
-
VBS Bookを閉じるコード
-
Excelのマクロについて教えてく...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
ACCESSVBA からExcelの他ブック...
-
vbaで他のブックに転記したい。...
-
【マクロ】違うフォルダにある...
おすすめ情報