VBAで前月分のデータを自動でフォルダ分けして保存するには、DateAdd で前月の日付を取得し、MkDir でフォルダを作成、SaveCopyAs で保存します。毎月の手作業がワンクリックで済むようになり、保存ミスも防げます。
この記事では、次の内容を順番に解説します。
- 前月の年月を自動で取得する方法
- フォルダを自動作成してブックを保存するコード
- 保存先のパスを変更する方法
前月の年月を自動で取得するには?
DateAdd 関数で今日の日付から1か月前を取得し、Format で「yyyy_mm」形式に変換します。
Dim lastMonth As String
lastMonth = Format(DateAdd("m", -1, Date), "yyyy_mm")
たとえば今日が2025年7月15日なら、lastMonth には「2025_06」が入ります。これをフォルダ名やファイル名に使えば、前月を意識した処理を自動で行えます。
DateAdd の第1引数を変えると、他の期間にも対応できます。
' 2か月前
Format(DateAdd("m", -2, Date), "yyyy_mm")
' 前年
Format(DateAdd("yyyy", -1, Date), "yyyy")
前月フォルダを自動作成してブックを保存するには?
前月の年月を取得し、フォルダがなければ作成して、ブックをコピー保存する一連の処理です。
Sub SaveToLastMonthFolder()
Dim fPath As String
Dim saveName As String
Dim lastMonth As String
' 前月の年月を取得(例:2025_06)
lastMonth = Format(DateAdd("m", -1, Date), "yyyy_mm")
' 保存先のパス(例:C:¥Backup¥2025_06¥)
fPath = "C:¥Backup¥" & lastMonth & "¥"
' フォルダが存在しなければ作成
If Dir(fPath, vbDirectory) = "" Then MkDir fPath
' 保存ファイル名(元ファイル名をそのまま使用)
saveName = fPath & ThisWorkbook.Name
' 別名で保存(元ブックは変更せず)
ThisWorkbook.SaveCopyAs saveName
MsgBox "前月フォルダに保存しました:" & vbCrLf & saveName
End Sub
コードのポイント
MkDir:フォルダを作成します。すでに存在する場合にエラーになるので、Dirで存在チェックをしてから実行しています。SaveCopyAs:元のブックを変更せずに、別の場所にコピー保存します。元ファイルが上書きされる心配がありません。"C:¥Backup¥":保存先のパスです。自分の環境に合わせて変更してください。
保存先のパスを変更するには?
保存先を変えたい場合は、fPath のパスを書き換えるだけです。
' デスクトップに保存する場合
fPath = "C:¥Users¥yourname¥Desktop¥Backup¥" & lastMonth & "¥"
' 共有フォルダに保存する場合
fPath = "¥¥server¥shared¥Backup¥" & lastMonth & "¥"
' Dドライブに保存する場合
fPath = "D:¥月次データ¥" & lastMonth & "¥"
"C:¥Users¥yourname" の部分は、自分のユーザー名に置き換えてください。エクスプローラーのアドレスバーに表示されるパスをそのまま使えます。
まとめ
- 前月の取得:
Format(DateAdd("m", -1, Date), "yyyy_mm")で前月の年月を自動取得。 - フォルダ作成:
MkDirで前月名のフォルダを自動作成(存在チェック付き)。 - 安全な保存:
SaveCopyAsで元ブックを変更せずにコピー保存。 - 保存先の変更:
fPathのパスを書き換えるだけで対応可能。
よくある質問
MkDirで「パスが見つかりません」エラーが出る場合は?
MkDir は一度に1階層しかフォルダを作れません。たとえば「Backup」フォルダがない状態で「Backup¥2025_06」を作ろうとするとエラーになります。先に親フォルダ(Backup)を手動で作っておくか、MkDir "C:¥Backup" を先に実行してください。
SaveCopyAsとSaveAsの違いは?
SaveCopyAs は元のブックを開いたまま、別の場所にコピーを保存します。元ブックの名前も保存先も変わりません。一方 SaveAs は保存後にそのファイルが作業中のブックになるため、元ブックとの紐づけが変わります。バックアップ目的なら SaveCopyAs の方が安全です。
前月ではなく当月のフォルダに保存したい場合は?
DateAdd("m", -1, Date) の部分を Date に変更するだけです。Format(Date, "yyyy_mm") とすると今月の年月が取得できます。
フォルダ名のフォーマットを変えたい場合は?
Format の書式を変更します。たとえば「2025年06月」にしたい場合は Format(DateAdd("m", -1, Date), "yyyy年mm月")、「202506」にしたい場合は Format(DateAdd("m", -1, Date), "yyyymm") とします。
毎月自動で実行させることはできる?
Excelの Workbook_Open イベントにこのマクロを呼び出すコードを書いておけば、ブックを開いたタイミングで自動実行できます。さらにWindowsのタスクスケジューラと組み合わせれば、決まった日時にExcelを開いてマクロを実行させることも可能です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



