エクセルで、複数の.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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Excel]ADODBでNull変換されて...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
VBA アプリケーション定義また...
-
VBA シートをコピーする際に Co...
-
vbaで他のブックに転記したい。...
-
VBA 実行時エラー 2147024893
-
エクセルVBAで書式と値の貼付け...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA 別ブックからコピペしたい...
-
エクセル vba ある検索値を別ブ...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
拡張メタファイルにて貼り付け
-
【マクロ】違うフォルダにある...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
【マクロ】AブックからBブック...
-
【ExcelVBA】インデックスが有...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA コードを実行すると画面が...
-
VBA シート名が一致した場合の...
-
VBA 実行時エラー 2147024893
-
VBS Bookを閉じるコード
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【マクロ】違うフォルダにある...
-
[Excel]ADODBでNull変換されて...
-
VBAで複数のブックを開かずに処...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
vbaでvbaProjectのパスワード解...
おすすめ情報