月次でExcelファイルを管理していると、「前月分のデータをまとめて別のフォルダに保存したい」といった場面がよくあります。
手作業で毎回フォルダを作り、ファイルを振り分けていては、作業時間がかかるだけでなく、保存ミスのリスクも高まります。
そこで今回は、VBAで前月分のファイルを自動でフォルダ分けして保存するマクロをご紹介します。
このような処理をマクロ化しておくことで、業務のスピードと正確さがぐっと向上します。
前月の日付から保存フォルダを自動で生成
まず、前月の年月を取得して、それを元に保存先のフォルダ名を決めます。次のようなコードで対応できます。
Dim lastMonth As String
lastMonth = Format(DateAdd("m", -1, Date), "yyyy_mm")
このコードでは、今日の日付から1か月前を DateAdd で取得し、Format 関数で「2024_06」などの形式に変換しています。これを使えば、自動的に「前月」を意識した処理が可能になります。
自動で前月フォルダを作成し、ブックを保存するコード
次のコードでは、保存時に「前月の年月」を含んだフォルダを自動で作成し、現在のブックをその中にコピー保存します。
Sub SaveToLastMonthFolder()
Dim fPath As String
Dim saveName As String
Dim lastMonth As String
' 前月の年月を取得(例:2024_06)
lastMonth = Format(DateAdd("m", -1, Date), "yyyy_mm")
' 保存先のパス(例:デスクトップ¥Backup¥2024_06¥)
fPath = Environ("USERPROFILE") & "¥Desktop¥Backup¥" & lastMonth & "¥"
' フォルダが存在しなければ作成
If Dir(fPath, vbDirectory) = "" Then MkDir fPath
' 保存ファイル名(元ファイル名をそのまま使用)
saveName = fPath & ThisWorkbook.Name
' 別名で保存(元ブックは変更せず)
ThisWorkbook.SaveCopyAs saveName
MsgBox "前月フォルダに保存しました:" & vbCrLf & saveName
End Sub
このコードは、次のような流れで処理されます。
- 前月の日付を取得して「yyyy_mm」形式に整える
- 指定パスの中にその年月のフォルダを作成(なければ)
- ファイル名を決めて
SaveCopyAsで保存
これにより、前月分の整理を自動で行えるようになります。
Environ関数について
今回のマクロでは、保存先を指定するために Environ("USERPROFILE") を使っています。
この Environ 関数は、Windowsの環境変数を取得する関数です。たとえば、次のような使い方ができます。
MsgBox Environ("USERPROFILE")
これを実行すると、通常は C:¥Users¥ユーザー名 のようなパスが表示されます。ユーザーごとに異なるパスを自動で取得できるため、どのパソコンでも共通の処理が実現できます。
よく使われる環境変数の例は次の通りです。
USERPROFILE:ユーザーのプロファイルパス(例:C:¥Users¥yourname)TEMP:一時ファイル保存先USERNAME:ログインしているユーザー名
このように Environ を活用することで、環境に依存しない柔軟なマクロ作成が可能になります。
実装するメリット
このマクロを取り入れることで、次のようなメリットが得られます。
- 前月分の整理を人手でやらなくてよくなる
- 決まったルールで保存することで管理がしやすくなる
- 元のブックは変更せず、安全に保存可能(
SaveCopyAs) - 毎月の作業の一貫性と効率が向上する
特に報告書や帳票を月ごとに管理するケースでは、ファイル整理の手間が大幅に削減されます。
まとめ
毎月のファイル管理において、「保存先のフォルダを自動で切り替える仕組み」は、ミスの防止と作業時間の短縮につながります。
DateAddとFormatを使って前月を自動計算MkDirで必要なフォルダを自動作成SaveCopyAsでファイルを安全にコピー保存
といった一連の処理をマクロで自動化するだけで、日々の業務が一段とラクになります。
「前月分は自動で整理」、そんな仕組みを取り入れて、手間をひとつ減らしてみましょう。
