質問: エクセルVBAの超初心者です。 複数のフォルダに「●●社計算書(2010年3月).xls」・・・()内の年月は毎月増えます。格納されているフォルダは各会社名です。 というブックがあります。その各ブック内の売上というシートにある商品コードと売上金額を別の集計用ブックで集計したいと思っています。 どのように集計用ブックにコードを書いたらよいのでしょうか? 1 商品コードは各社共通です。 2 ブック名は共通ですがブック内のフォーマットは共通していません。(シート名は共通) 3 集計するのは集計時の年月度のデータです。 要領を得ず、ぶしつけな質問かと思いますが、大変困っています。 どなたかお分かりになる方、ご教授願います。
回答: >要領を得ず そうですね。実際のマクロプログラムをサンプルとしても書いてみるには,あまりに情報が足りなすぎます。 まず手始めにマクロの事はちょっと横に置いて忘れておいて,「日本語で」今から何をすべきなのか,作業の段取りを箇条書きしてみる所から始める必要があるようです。 サンプル: 1)調べるべきフォルダを漏れなく特定する方法を考えて決める 2)特定した各フォルダ内にある,調べるべきブック名を特定する方法を考える 3)各々特定したブックの中の,実際に調べるべきシート名を特定する(ここだけ既定) 4)そのシートの中から,具体的にどのデータを取ってくる必要があるのか整理する 5)実際に欲しいデータが入っているセルを特定する方法を考える 6)特定したセルの値を,集計ブックのどこにどうやって集約するのか考える それぞれの作業ステップは,マクロを一つも使わず「あなた自身がマクロになったつもりで」あなたの目と手とアタマを使って実際にエクセルを操ってみる事で,具体的に「何を見て」「どういう基準でどう判断して」「どのように手を動かしてエクセルを操ったか」の段取りとして整理することが出来ます。 その段取りが確認できたら,ようやくエクセルを開いてその作業をマクロのプログラムに翻訳する作業を開始できますし,部分的には「この工程をいきなりマクロにするのは大変だから,とりあえずここは手でやろう」といった判断も出てきます。 #しばしば初心者さんが陥るトラップとして,誰か親切さんが一杯マクロを書いてくれたのを飛びついて頂戴したのはいいけれど,一体その方が「どんな段取りを想定してプログラムしたのか」何も判ってないで何をやってるのか(当然どう修正したらいいのか)全く手が着かない,結局喜んで拾ったのに捨てるしかないハメに陥ります。 ○簡単な作成例 フォルダの特定はあなたの目で行う ファイルの特定はあなたの目で行う ブックを開くのはあなたが手で行う シートを開くのはあなたが手で行う シートの「不定のフォーマット」で欲しいデータのセル範囲を確認し選択する 次のマクロを実行する Sub Macro1() Selection.Copy _ Destination:=ThisWorkbook.Worksheets("集約シート").range("A65536").End(xlup).Offset(1) End Sub 集約ブックの集約シートにデータがコピー出来るので,ピボットテーブルレポートであとは集計させる 以上です。 そして次のステップとして,今度は段取りのどの部分を自動化しようか考えて,またその部分を実装していきます。