サイトについて      連絡先   検索

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

はじめに

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

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

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

  • 目次
    • ブックを上書き保存する
    • ブックを名前を付けて保存する

ブックを上書き保存する

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


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

' ブックを編集
wb.Sheets(1).Range("A1").Value = "編集"
       
wb.Save ' 上書き保存

新規作成したブックの保存先は Excel の「既定のローカルファイルの保存場所」になります。パスやブック名を変更するには名前を付けて保存します。

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

ブックを名前を付けて保存するにはWorkbook.SaveAs("フルパス")またはWorkbook.SaveAs("ファイル名")のように入力します。


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

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

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

ファイル名のみ入力したときの保存先は Excel の「既定のローカルファイルの保存場所」になります。

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

保存先に既にファイルが存在するとき、新規ファイルは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。上書きできません。

保存済みのファイルは、上書きするかメッセージが表示されます。

1

[いいえ] か [キャンセル] をクリックすると「エラー 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 ならキャンセルのように処理を分けられます。


If SaveAsWorkbook(wb, "D:\Book1.xlsx") = False Then
    Exit Sub ' キャンセル
End If

' 保存済み

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

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

戻り値に選択したフルパスが返ります。キャンセルすると "False" が返ります。

2

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

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

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

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

  • 目次
    • ブックを上書き保存する
    • ブックを名前を付けて保存する