これまでに、ExcelVBAでのファイルをオープンする方法やクローズする方法についての説明を記載しましたので、今回はファイルを保存する方法についての説明になります。
目次
Excel VBAでファイルを保存する方法はいくつかあります。
1.ファイルを上書き保存する方法
ファイルを上書き保存する場合には、以下のようにSaveを使用します。
Workbooks("test.xlsx").Save
これにより、開いている「test.xlsx」ファイルが保存されます。
この場合、「test.xlsx」ファイルは開いている必要があります。
同様にアクティブワークブックや自ワークブック(マクロ実行ファイル)を上書き保存する場合には以下のようになります。
ActiveWorkbook.Save
ThisWorkbook.Save
自ワークブックの1シート目の「A1」に「abc」と書き込んでから保存するような場合の例は以下のようになります。
Sub test() ThisWorkbook.Sheets(1).Range("A1").Value = "abc" ' ブックを編集 ThisWorkbook.Save ' 上書き保存 End Sub
同様に、アクティブブックの編集、保存の場合には以下のようになります。
Sub test() ActiveWorkbook.Sheets(1).Range("A1").Value = "abc" ' ブックを編集 ActiveWorkbook.Save ' 上書き保存 End Sub
Open()を使用して同じフォルダ内にある「test.xlsx」ファイルを開いて1シート目の「A1」に「abc」と書き込んでから保存するような場合の例は以下のようになります。
Sub test() Dim wb As Workbook Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\test.xlsx") wb.Sheets(1).Range("A1").Value = "abc" ' ブックを編集 wb.Save ' 上書き保存 End Sub
2.ブックに名前をつけて保存する方法
新しくブックを作成して編集し名前をつけて保存する場合には以下のようにWorkbook.SaveAs()を使用します。
Sub test() Dim wb As Workbook Set wb = Workbooks.Add ' ブックを作成 wb.Sheets(1).Range("A1").Value = "abc" ' 編集 wb.SaveAs ("test.xlsx") ' 名前を付けて保存 End Sub
ただし、この時に既にファイルが存在する場合は、以下のダイアログメッセージが表示されます。
この場合、「はい」を選択すると上書き保存されます。
「いいえ」か「キャンセル」を選択した場合には、「エラー 1004 :SaveAsメソッドは失敗しました」が発生します。
このような場合の一番簡単な対処方法は、エラーを無視することです。
以下のように、
「wb.SaveAs ("test.xlsx")」
の前に
「On Error Resume Next」
を実行することでエラーを無視します。
「wb.SaveAs ("test.xlsx")」
でエラーが発生した場合には、次の
「If Err.Number > 0 Then MsgBox "ファイルは保存されませんでした"」
で、
「ファイルは保存されませんでした」
というメッセージが表示されて終了します。
Sub test() Dim wb As Workbook Set wb = Workbooks.Add ' ブックを作成 wb.Sheets(1).Range("A1").Value = "abc" ' 編集 On Error Resume Next wb.SaveAs ("test.xlsx") ' 名前を付けて保存 If Err.Number > 0 Then MsgBox "ファイルは保存されませんでした" End Sub
3.ブックをコピーして保存する方法
ブックをコピーして保存する場合には以下のようにWorkbook.SaveCopyAs()を使用します。
Sub test() Dim wb As Workbook Set wb = Workbooks.Add 'ブックを作成 wb.Sheets(1).Range("A1").Value = "abc" '編集 wb.SaveCopyAs ("test.xlsx") 'コピーを名前を付けて保存 End Sub
このようにSaveCopyAs()を使用してコピー保存する場合にすでに同名のファイルが存在する場合には上書き保存されます。
4.名前を付けて保存ダイアログボックスを表示して保存する方法
「名前を付けて保存ダイアログボックス」を表示させてファイル名を指定して保存する場合は、Application.GetSaveAsFilenameメソッドを使用します。
たとえば、ActiveWorkbookに関して、名前を付けて保存ダイアログボックスを表示させてファイル名を指定して保存する場合は、以下のようになります。
Sub test() Dim filePath As Variant path = Application.GetSaveAsFilename ' 名前を付けて保存ダイアログを表示 If path = False Then Exit Sub ' キャンセル End If
' 保存 ActiveWorkbook.SaveAs (path) ' 指定したpathに保存 End Sub
Application.GetSaveAsFilenameを使用してファイル名を含むpathを指定し、
ActiveWorkbook.SaveAs (path)
で保存します。
以上がExcel VBA でのファイルを保存する主な方法になります。