VBA ワークブックを上書きや名前を付けて保存する

はじめに

Excel VBA マクロでワークブックを上書きや名前を付けて保存する方法を紹介します。

Workbook.Save メソッドから、ブックを上書き保存できます。

Workbook.SaveAs メソッドから、ブックを名前を付けて保存できます。

Workbook.SaveCopyAs メソッドから、ブックをコピーして保存できます。

ブックを作成するには「ワークブックを新規作成する」をご覧ください。
  • 目次
    • ブックを上書き保存する
    • ブックを名前を付けて保存する
    • ブックをコピーして保存する
    • 名前を付けて保存ダイアログを表示する
    • ブックのパスを取得する

ブックを上書き保存する

ブックを上書き保存するには Workbook.Save を入力します。

Dim wb As Workbook
Set wb = ThisWorkbook ' VBA を実行しているブックを取得

wb.Sheets(1).Range("A1").Value = "編集" ' ブックを編集

wb.Save ' 上書き保存

新規作成したブックを上書き

新規作成したブックを上書き保存したときのブック名は Book1.xlsx のように連番になります。

Dim wb As Workbook
Set wb = Workbooks.Add ' 新規作成したブックを取得
wb.Save ' 上書き保存
Debug.Print(wb.FullName)

保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。

default-path
カレントディレクトリは、ファイルを開くダイアログや名前を付けて保存ダイアログを使用すると変更されます。このため、必ず名前を付けて保存から絶対パスに保存します。

ブックを名前を付けて保存する

ブックを名前を付けて保存するには Workbook.SaveAs("D:\Book2.xlsx") または Workbook.SaveAs("Book2.xlsx") のように入力します。

Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成

wb.Sheets(1).Range("A1").Value = "編集" ' 編集

Call wb.SaveAs("D:\Book2.xlsx") ' 名前を付けて保存
Call wb.SaveAs("Book2.xlsx")    ' 名前を付けて保存

ファイル名だけ指定したときの保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。

default-path

保存したファイル名がブック名になります。

すでに開いているブックと同じファイル名で保存できません。Excel の仕様で同じ名前のブックを同時に開くことはできません。

上書き

保存先に既にファイルが存在するとき、上書きするかメッセージが表示されます。

3

[はい] をクリックすると上書き保存されます。

[いいえ] か [キャンセル] をクリックすると「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。他のエラーと混同しないように、保存専用のメソッドを作成すると処理がわかりやすくなります。

Public Function SaveAsWorkbook(ByVal wb As Workbook, ByVal fullPath As String) As Boolean
On Error GoTo catch

    Call wb.SaveAs(fullPath)
    SaveAsWorkbook = True
    Exit Function

catch:
    SaveAsWorkbook = False
End Function

SaveAsWorkbook の戻り値が True なら保存、False ならキャンセルのように処理を分けられます。

Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成

If SaveAsWorkbook(wb, "D:\Book2.xlsx") = True Then
    ' 保存済み
Else
    ' キャンセル
End If

メッセージを表示しないで上書きするには Application.DisplayAlerts = False を入力します。保存したら True に戻します。

Application.DisplayAlerts = False ' メッセージを非表示

Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成
Call wb.SaveAs("D:\Book2.xlsx") ' 名前を付けて保存

Application.DisplayAlerts = True  ' メッセージを表示

ブックをコピーして保存する

ブックをコピーして保存するには Workbook.SaveCopyAs("D:\Copy.xlsx") または Workbook.SaveCopyAs("Copy.xlsx") のように入力します。

Dim wb As Workbook
Set wb = Workbooks.Add ' ブックを作成

wb.Sheets(1).Range("A1").Value = "コピー" ' 編集

Call wb.SaveCopyAs("D:\Copy.xlsx")  ' コピーを名前を付けて保存
Call wb.SaveCopyAs("Copy.xlsx")     ' コピーを名前を付けて保存

ファイル名だけ指定したときの保存先はカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。

保存先に既にファイルが存在するときは上書きします。

すでに開いているブックと同じファイル名で保存できません。Excel の仕様で同じ名前のブックを同時に開くことはできません。

名前を付けて保存ダイアログを表示する

名前を付けて保存ダイアログから選択したファイルのパスを取得できます。

名前を付けて保存ダイアログを表示するには Application.GetSaveAsFilename メソッドを使用します。

4

戻り値に選択したファイルの絶対パスを返します。キャンセルすると False を返します。

Dim filePath As Variant
filePath = Application.GetSaveAsFilename ' ダイアログを表示

If filePath = False Then
    Exit Sub ' キャンセル
End If

' 保存
ActiveWorkbook.SaveAs(filePath) ' 名前を付けて保存

ダイアログは保存先のパスを取得するだけで保存はしていません。ダイアログを表示した後に保存処理をする必要があります。

ファイルを選択すると、カレントディレクトリがそのパスになります。

ブックのパスを取得する

ブックが保存されているパスを取得するには Workbook.FullName のように入力します。

Dim s As String
s = ActiveWorkbook.FullName ' D:\Book1.xlsx
s = ActiveWorkbook.Name     ' Book1.xlsx
s = ActiveWorkbook.Path     ' D:
Debug.Print(s)
詳しくは「ワークブック名やパスを取得する」をご覧ください。