Excelマクロで保存時に日付を自動でファイル名に入れる方法|Format関数の使い方

VBAでファイル名に今日の日付を自動で入れるには、Format(Date, "yyyymmdd") で日付を文字に変換して、ファイル名に組み合わせるだけです。たとえば「Report_20250901.xlsx」のような名前で自動保存されるようになります。

この記事では、次の内容を順番に解説します。

  • 日付入りファイル名で保存する基本のコード
  • 日付の形式を変える方法
  • ファイル名の前後に文字をつける方法
  • 保存先フォルダを指定する方法

日付を自動でファイル名に入れて保存するには?

次のコードを実行すると、「Report_20250901.xlsx」のようなファイル名でマクロファイルと同じフォルダに保存されます。

Sub SaveWithDate()

    Dim path As String
    Dim fileName As String
    Dim today As String

    ' 保存先はマクロファイルと同じフォルダ
    path = ThisWorkbook.Path & "¥"

    ' 今日の日付を「20250901」の形式で取得
    today = Format(Date, "yyyymmdd")

    ' ファイル名を組み立てる
    fileName = "Report_" & today & ".xlsx"

    ' 保存する
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=path & fileName, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True

End Sub

コードの各部分の意味

  • Date:今日の日付を取得します。
  • Format(Date, "yyyymmdd"):日付を「20250901」のような文字に変換します。
  • "Report_" & today & ".xlsx":文字と日付をつなげてファイル名を作ります。
  • SaveAs:指定したファイル名で新しいファイルとして保存します。
  • Application.DisplayAlerts = False:「上書きしますか?」のポップアップを自動でOKにします。処理後は必ず True に戻します。

日付の形式を変えるには?

Format の中の文字を変えるだけで、日付の見た目を自由に変えられます。

' 例:2025_09_01
today = Format(Date, "yyyy_mm_dd")

' 例:20250901
today = Format(Date, "yyyymmdd")

' 例:2025年09月01日
today = Format(Date, "yyyy年mm月dd日")

ただしファイル名に「/」や「:」などの記号は使えないため、スラッシュ区切り(2025/09/01)はファイル名に使わないようにしましょう。

ファイル名の前後に文字をつけるには?

fileName を作る部分を変えるだけで、自由にカスタマイズできます。

' 前に文字をつける例:Sales_20250901.xlsx
fileName = "Sales_" & today & ".xlsx"

' 後ろにも文字をつける例:Report_20250901_確定版.xlsx
fileName = "Report_" & today & "_確定版.xlsx"

保存先フォルダを指定するには?

マクロファイルと同じ場所ではなく、特定のフォルダに保存したい場合は path の部分を書き換えます。

' 特定のフォルダを直接指定する場合
path = "C:¥Users¥ユーザー名¥Documents¥保存用¥"

毎回保存先を選びたい場合は、フォルダ選択画面と組み合わせる方法もあります。

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "保存先フォルダを選択してください"
    If .Show = -1 Then
        path = .SelectedItems(1) & "¥"
    Else
        MsgBox "保存処理を中断しました。"
        Exit Sub
    End If
End With

まとめ

日付をファイル名に自動で入れるのは、VBAの中でも特に手軽に始められる自動化のひとつです。一度作っておくだけで、毎回の手入力がなくなります。

  • 日付の取得Format(Date, "yyyymmdd") で「20250901」のような文字に変換する。
  • ファイル名の組み立て:文字と日付を & でつなげるだけ。
  • 保存先の指定path の部分を書き換えるか、フォルダ選択画面と組み合わせる。
  • ポップアップを出さないApplication.DisplayAlerts = False で自動保存できる。処理後は必ず True に戻す。

よくある質問

SaveAsを使うと元のファイルが変わってしまう?

はい、SaveAs で保存すると、開いているファイルが新しいファイル名に切り替わります。元のファイル(例:Report.xlsm)はそのまま残っていますが、保存後は新しいファイル(例:Report_20250901.xlsx)が開いた状態になります。

元のファイルを開いたままにしておきたい場合は、ThisWorkbook.SaveCopyAs を使うと、今開いているファイルはそのままで、別名のコピーだけを作ることができます。

同じ日に2回実行したら上書きされる?

同じ日付のファイルがすでに存在する場合、Application.DisplayAlerts = False を設定していると確認なしで上書きされます。上書きしたくない場合は、ファイル名に時刻も追加するか、保存前にファイルの存在を確認する処理を加えると安心です。

時刻もファイル名に入れたい場合は?

Format(Now, "yyyymmdd_hhmmss") を使うと「20250901_143022」のように時刻まで入ったファイル名が作れます。Date の代わりに Now を使うのがポイントです。

マクロ付きファイル(.xlsm)として保存したい場合は?

FileFormat:=xlOpenXMLWorkbookFileFormat:=xlOpenXMLWorkbookMacroEnabled に変えて、拡張子も .xlsm にします。マクロを含んだまま保存したいときに使います。

保存したあとに元のファイルに戻るようにしたい場合は?

SaveAs を実行すると開いているファイルが新しいファイルに切り替わります。元のファイルに戻りたい場合は、SaveAs の前に元のファイルパスを変数に保存しておいて、保存後に Workbooks.Open で開き直す方法があります。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

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

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

コメントする

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

上部へスクロール