マクロを実行するとこんな感じ!
繰り返しコピー処理で日付ごとのブックとシートを作成するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Sub 日報を作成() '変数宣言 Dim F_path As String 'ファイルパス Dim m As Integer '月ごとのフォルダ名 Dim i As Integer 'ループカウンタ Dim cd As String 'セルの日付取得 '変数に代入 F_path = "マクロを実行しているExcelファイルの場所を指定" m = Range("E4").Value '月ごとのフォルダを生成 MkDir F_path & m & "月_日報" ThisWorkbook.Worksheets("日報作成").Range("B2").Select i = 0 Do cd = ActiveCell.Offset(i, 0).Value '空白になったらメッセージボックスを表示 If cd = "" Then MsgBox "日報のコピーが完了しました" Exit Do End If '「日報テンプレート」を開く Workbooks.Open F_path & "日報テンプレート.xlsx" 'シートとブックに「日付+タイトル」の名前をつけて保存して閉じる Sheets(1).Name = cd ActiveWorkbook.SaveAs F_path & m & "月_日報\" & cd & "_日報.xlsx" ActiveWorkbook.Close i = i + 1 Loop End Sub |
今回は日報のテンプレートを1か月分コピー、それぞれ日付で名前をつけて保存するというコードです。
基本的に日報は業務する日に使うと思うので、マクロ実行ファイルの日付には土日祝を除いた平日のみを抽出しています。
ちなみにセルの日付を取得する変数がString型になっているのは、シート内の日付を文字列に変換しているためです。
コードの内容を解説
8行目:変数に代入
1 2 3 |
'変数に代入 F_path = "マクロを実行しているExcelファイルの場所を指定" m = Range("E4").Value |
変数「F_path」にはマクロを実行しているExcelファイルの場所を指定しています。
私の場合はデスクトップに配置している「【Excel VBA】日報」というフォルダ内にマクロ実行ファイルが入っているので「C:\Users\mameg\Desktop\【Excel VBA】日報\」と指定しています。
- Windows11の場合
ファイルを選択して[Ctrl]+[Shift]+[C]するとファイルパスがコピーできます - Windows10以前の場合
ファイルを右クリック→「プロパティ」をクリック→「場所」に記載されています
コピペしたら最後に「¥(半角)」を入力するのを忘れずに!
F_path = “C:\Users\mameg\Desktop\【Excel VBA】日報”
F_path = “C:\Users\mameg\Desktop\【Excel VBA】日報\“
変数「m」にはマクロ実行ファイル内のシートに記載されている月の値(セル[E4])を代入しています。
12行目:MkDirステートメント
1 2 |
'月ごとのフォルダを生成 MkDir F_path & m & "月_日報" |
MkDirはフォルダを生成するステートメントです。
フルパスを指定してから任意のフォルダ名を指定します。
19~39行目:Do~Loop処理、If処理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
i = 0 Do cd = ActiveCell.Offset(i, 0).Value '空白になったらメッセージボックスを表示 If cd = "" Then MsgBox "日報のコピーが完了しました" Exit Do End If '「日報テンプレート」を開く Workbooks.Open F_path & "日報テンプレート.xlsx" 'シートとブックに「日付+タイトル」の名前をつけて保存して閉じる Sheets(1).Name = cd ActiveWorkbook.SaveAs F_path & m & "月_日報\" & cd & "_日報.xlsx" ActiveWorkbook.Close i = i + 1 Loop |
Do~Loopは処理を繰り返すステートメントです。
指示がなければ無限ループするので、条件を満たしたらExit Do で抜け出す必要があります。
今回の場合
- 変数「cd」にファイル名を代入
- 「日報テンプレート」を開く
- 「日報テンプレート」のシート名を変数「cd」に変更
- MkDirで生成されたフォルダの中に「cd_日報」という名前で保存し閉じる
という処理を繰り返します。
もちろん、このままだと無限ループになってしまうので空白になったら処理を抜け出し、処理が終わったことがわかるようにメッセージボックスを表示するコードも記述します。
1 2 3 4 5 6 |
'空白になったらメッセージボックスを表示 If cd = "" Then MsgBox "日報のコピーが完了しました" Exit Do End If |
コメント