| すぐマク YNxv9292 | Home | Search | Contents | Gallery | Introduction | Service | Support | What's New! |
| 月別フォルダのブックを順に開いて一覧表を作成するには? |
|
|
||||
|
ひとつできたなら続けて2〜3個、自動記録してみれば考えやすかったでしょうに。 質問文だけでは詳しい仕様がわかりませんから勝手に想像して、代わりにやってみましょうか。 |
||||
|
||||
以上を自動記録すると下図のようなマクロができます。 (「一覧表.xls」に記録した。行番号とコメントは筆者が加筆)
Sub Macro1()
11 Range("B2:C13").Select
12 Selection.ClearContents
' 1月分の処理
31 ChDir "C:\A\1月"
32 Workbooks.Open Filename:="C:\A\1月\実績.xls"
33 Range("B2:C2").Select
34 Selection.Copy
35 ActiveWindow.Close
36 Range("B2").Select
37 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
' 2月分の処理
51 ChDir "C:\A\2月"
52 Workbooks.Open Filename:="C:\A\2月\実績.xls"
53 Range("B2:C2").Select
54 Selection.Copy
55 ActiveWindow.Close
56 Range("B3").Select
57 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
' 3月分の処理
71 ChDir "C:\A\3月"
72 Workbooks.Open Filename:="C:\A\3月\実績.xls"
73 Range("B2:C2").Select
74 Selection.Copy
75 ActiveWindow.Close
76 Range("B4").Select
77 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
End Sub
3カ月分処理するための 3セットのコード(31〜37、51〜57、71〜77行目)ができました。見比べるとわかりますが月により相違があるところは、 ・31、51、71行目と 32、52、72行目の "" の中にある 1、2、3 ・36、56、76行目の "" の中にある 2、3、4 の3カ所だけです。 ということは、31〜37行目のコードを月に応じて処理可能なように修正すれば、51〜77行目のコードが不要になります。 まずは不要なコードを削除してから、1月から 12月まで繰り返し処理するための For...Next文を挿入してみましょう。(下図30、38行目)
Sub Macro1_a()
11 Range("B2:C13").Select
12 Selection.ClearContents
' 1月分の処理
30 For 月 = 1 To 12
31 ChDir "C:\A\1月"
32 Workbooks.Open Filename:="C:\A\1月\実績.xls"
33 Range("B2:C2").Select
34 Selection.Copy
35 ActiveWindow.Close
36 Range("B2").Select
37 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
38 Next
End Sub
続いて、"" の中の文字列を上記の変数「月」を利用するコードに書き換えます。(下図31、32、36行目)
Sub Macro1_b()
11 Range("B2:C13").Select
12 Selection.ClearContents
' 1月分の処理
30 For 月 = 1 To 12
31 ChDir "C:\A\" & 月 & "月"
32 Workbooks.Open Filename:="C:\A\" & 月 & "月\実績.xls"
33 Range("B2:C2").Select
34 Selection.Copy
35 ActiveWindow.Close
36 Range("B" & 月 + 1).Select
37 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
38 Next
End Sub
修正したマクロをこの段階で実行してみましょう。すると右図のように、[パスが見つかりません]の実行時エラーが表示されるはずです。 原因究明のため、[デバッグ]ボタンをクリックします。 すると、VBE画面に下図のように黄色の矢印と網掛けで、不具合カ所が表示されます。 ![]() そこで左図のように、マウスポインタを変数「月」に合わせると 「月=4」と表示されるので、サブフォルダ「4月」に ChDir しようとして見つからないからだということが分ります。 エラーの原因としては、追加した For...Next文が無条件で 1月から12月までを繰り返し処理しますが、未来分のサブフォルダはまだ作ってないとか、作ってあるが 「実績.xls」 が作ってないという場合もあるでしょう。 とりあえず、VBE画面の[リセット]ボタンをクリックして中止し、下図のとおり エラー処理 のコードを 4行追加します。
Sub Macro1_c()
11 Range("B2:C13").Select
12 Selection.ClearContents
' 1月分の処理
30 For 月 = 1 To 12
On Error GoTo 終了処理
31 ChDir "C:\A\" & 月 & "月"
32 Workbooks.Open Filename:="C:\A\" & 月 & "月\実績.xls"
On Error GoTo 0
33 Range("B2:C2").Select
34 Selection.Copy
35 ActiveWindow.Close
36 Range("B" & 月 + 1).Select
37 ActiveSheet.PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:= _
False
38 Next
終了処理:
On Error GoTo 0
End Sub
|
||||
|
サンプルファイルのダウンロードは ここをクリック
(YNxv9292.exe 47KB) ※ 一旦、ハードディスクに保存し、後でダブルクリックして、展開先フォルダに 「C:\」 と入力して [OK]クリック すれば 「A」フォルダができ、その中の 「一覧表.xls」のマクロを試せます。 関連ページ: 選択したフォルダ内の全てのブックを開いて作業するには 参考図書: Excel VBAマクロ組み方講座 実践編第1章6 指定フォルダ内の全てのブックを順に開く |
| http://www.geocities.jp/happy_ngi/ | Home | Contents | Gallery | Introduction | Service | Support | What's New! |