VBAで前月データを自動フォルダ分けして保存する方法|DateAdd・MkDir・SaveCopyAs

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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール