【VBAリファレンス|実務向け】【VBA実務テクニック】Excelブックの保存を自動化する「SaveAs」と「Save」の使い分け

スポンサーリンク

なぜVBAでの「保存」操作が重要なのか

実務において、Excel VBAで帳票を作成したりデータを加工したりした後、最後に「ファイルを保存して閉じる」という工程は必須です。手動で行えば数秒の作業ですが、大量のファイルを一括処理する場合や、決まったルールでフォルダにバックアップを取る場合、VBAでの自動化は「ヒューマンエラーの防止」と「業務効率化」に直結します。今回は、VBAでファイルを保存する際の基本である「Save」と「SaveAs」の使い分けについて解説します。

基礎知識:SaveとSaveAsの違い

Excel VBAでブックを保存するメソッドには、大きく分けて2種類あります。

1. Saveメソッド(上書き保存)
既に名前が付けられているブックに対して、変更内容を現在のファイル名で保存します。新規作成したばかりのファイル(まだ名前がない状態)に対して実行すると、自動的に「名前を付けて保存」のダイアログが表示されます。

2. SaveAsメソッド(名前を付けて保存)
特定のフォルダに、任意の名前でファイルを保存します。実務では「今日の日付をファイル名に含めて保存したい」「PDF形式で保存したい」といった場合に必須のメソッドです。

実装のポイント

実務で最もよく使うのは「SaveAs」です。特に「同じファイル名が存在する場合にエラーで止まらないようにする」ことが重要です。これには Application.DisplayAlerts = False を使い、上書き確認のダイアログを一時的に非表示にするテクニックが有効です。

サンプルプログラム:日付付きで別名保存するマクロ

以下のコードは、現在のブックを「デスクトップ」に「売上報告_YYYYMMDD.xlsx」という名前で保存する実務的なサンプルです。

Sub SaveWorkbookWithDate()
‘ 画面更新や警告を一時停止して処理をスムーズにする
Application.DisplayAlerts = False

Dim savePath As String
Dim fileName As String

‘ デスクトップのパスを取得してファイル名を生成
savePath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\”
fileName = “売上報告_” & Format(Date, “yyyymmdd”) & “.xlsx”

‘ ブックを名前を付けて保存(SaveAsメソッド)
‘ FileFormat:=51 は xlsx 形式を指します
ThisWorkbook.SaveAs Filename:=savePath & fileName, FileFormat:=xlOpenXMLWorkbook

‘ 警告表示を元に戻す
Application.DisplayAlerts = True

MsgBox “ファイルを保存しました:” & vbCrLf & savePath & fileName
End Sub

応用・注意点

1. 拡張子とファイル形式の整合性
SaveAsを使う際、最も多いエラーは「拡張子とFileFormatの不一致」です。例えば、xlsx形式で保存するのにFileFormatを指定しなかったり、xlsm形式(マクロ有効ブック)で保存すべきなのにxlsxを指定してマクロが消えてしまったりする事故が多発します。保存形式が明確な場合は、必ずFileFormat引数を指定する癖をつけましょう。

2. フォルダの存在確認
保存先フォルダが存在しない場合、コードはエラーで停止します。実務で共有サーバーなどを指定する場合は、事前に Dir関数 を使って「フォルダが存在するか?」をチェックする処理を組み込むと、より堅牢なプログラムになります。

3. 上書き確認の回避
先述の `DisplayAlerts = False` は強力ですが、処理が終わったら必ず `True` に戻すことを忘れないでください。これを忘れると、Excel側の重要な警告まで無視されるようになり、思わぬ事故に繋がります。

まずは上記のサンプルを参考に、ご自身の業務で「日付付き保存」を自動化することから始めてみてください。これだけでも、ファイル管理の手間が劇的に減るはずです。

タイトルとURLをコピーしました