Excel VBAを使ってブックを名前をつけて保存する方法は、データ処理やレポート作成の自動化において非常に重要なスキルです。この記事では、その基本から応用までを網羅的に解説します。

VBAで名前をつけて保存する基本
SaveAsメソッドの基本形
Excel VBAでブックを名前をつけて保存する基本的な方法は、WorkbookオブジェクトのSaveAsメソッドを使用することです。以下がその基本形です。
Sub BasicSaveAs()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\BasicSaveAs.xls"
End Sub
処理の流れ
Workbookオブジェクトを宣言します。- 既存のブック(
Sample.xls)をbook1にセットします。 SaveAsメソッドで新しい名前(BasicSaveAs.xls)で保存します。
Filename引数について
このFilename引数は、保存するファイルの名前を指定します。もしパスを指定しない場合、カレントディレクトリに保存されます。
エラーハンドリング

名前をつけて保存する際には、いくつかのエラーが発生する可能性があります。例えば、同じ名前のブックが既に開いている場合や、同じ名前のファイルが既に存在する場合です。これらのエラーを避けるためには、事前にチェックするコードを挿入することが有用です。
以下は、エラーハンドリングを追加したコードです。
Sub BasicSaveAs()
Dim book1 As Workbook
' エラーハンドリング開始
On Error Resume Next
' Workbookオブジェクトを設定
Set book1 = Workbooks("Sample.xls")
' エラーハンドリング終了
On Error GoTo 0
' Workbookオブジェクトが正しく設定されているか確認
If book1 Is Nothing Then
MsgBox "Sample.xlsが開かれていません。ブックを開いてから再度試してください。"
Exit Sub
End If
' SaveAsメソッドで保存
On Error GoTo SaveError ' エラーが発生した場合のジャンプ先を設定
book1.SaveAs Filename:="C:\excelsample\BasicSaveAs.xls"
Exit Sub ' 正常終了
SaveError: ' エラーが発生した場合の処理
MsgBox "保存に失敗しました。エラー内容:" & Err.Description
End Sub
On Error Resume Nextを使用して、エラーが発生しても次の行に進むようにしています。book1がNothing(つまり、”Sample.xls”が開かれていない)場合には、メッセージボックスを表示してSubを終了します。SaveAsメソッドでエラーが発生した場合には、SaveErrorラベルにジャンプしてエラーメッセージを表示します。
これにより、”Sample.xls”が開かれていない場合や、SaveAsメソッドで何らかのエラーが発生した場合でも、適切なエラーメッセージが表示されます。
SaveAsメソッドの詳細な引数
SaveAsメソッドには多くの引数があり、それぞれに特定の設定や機能があります。以下の表で主要な引数とその用途を詳しく解説します。
| 引数名 | 説明 | 設定可能な値とその意味 |
|---|---|---|
| Filename | 保存するファイルの名前とパスを指定します。 | 文字列:保存するファイルのフルパス(例:”C:\path\to\file.xlsx”) |
| FileFormat | 保存するファイルの形式を指定します。 | 数値またはExcelの定数:51は.xlsx形式、56は.xls形式など。Excelの定数も使用可能(例:xlOpenXMLWorkbook) |
| Password | ファイルにパスワードを設定します。 | 文字列:設定するパスワード(例:”mypassword”) |
| WriteResPassword | 書き込みパスワードを設定します。 | 文字列:書き込み時に必要なパスワード(例:”writepassword”) |
| ReadOnlyRecommended | 読み取り専用を推奨するかどうかを設定します。 | 真偽値:Trueで読み取り専用を推奨、Falseで推奨しない |
| CreateBackup | バックアップファイルを作成するかどうかを設定します。 | 真偽値:Trueでバックアップを作成、Falseで作成しない |
| AccessMode | ファイルへのアクセスモードを設定します。 | Excelの定数:xlSharedで共有ブックとして保存。その他の定数も参照可能 |
| ConflictResolution | 保存時の競合解決の方法を指定します。 | 数値またはExcelの定数:1はローカルの変更を破棄。その他の定数も参照可能 |
| AddToMru | 最近使用したファイルのリストに追加するかどうかを設定します。 | 真偽値:Trueで最近使用したファイルリストに追加、Falseで追加しない |
| TextCodepage | テキストファイルのコードページを指定します。 | 数値:コードページの識別子(例:1252はANSI) |
| TextVisualLayout | テキストファイルのビジュアルレイアウトを指定します。 | Excelの定数:xlTextVisualLTRで左から右のレイアウト。その他の定数も参照可能 |
| Local | ローカルの設定を使用するかどうかを指定します。 | 真偽値:Trueでローカルの設定(言語や日付形式など)を使用、Falseで使用しない |
FileFormat引数のサンプルコード
Sub SaveAsXlsx()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample.xlsx", FileFormat:=51
End Sub
処理の流れ
Workbookオブジェクトを宣言し、既存のブックをセットします。SaveAsメソッドで新しい名前とファイル形式(XLSX)で保存します。
Password引数のサンプルコード
Sub SaveWithPassword()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample_secure.xlsx", Password:="mypassword"
End Sub
処理の流れ
Workbookオブジェクトを宣言し、既存のブックをセットします。SaveAsメソッドで新しい名前で、パスワードを設定して保存します。
サンプルコード集
ファイル形式を指定して保存
Sub SaveAsXlsx()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample.xlsx", FileFormat:=51
End Sub
処理の流れ
Workbookオブジェクトを宣言します。- 既存のブックを
book1にセットします。 SaveAsメソッドで新しい名前とファイル形式(XLSX)で保存します。
パスワードを設定して保存
Sub SaveWithPassword()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample_secure.xlsx", Password:="mypassword"
End Sub
処理の流れ
Workbookオブジェクトを宣言します。- 既存のブックを
book1にセットします。 SaveAsメソッドで新しい名前で、パスワードを設定して保存します。
読み取り専用を推奨して保存
Sub SaveAsReadOnlyRecommended()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample_readonly.xlsx", ReadOnlyRecommended:=True
End Sub
処理の流れ
Workbookオブジェクトを宣言します。- 既存のブックを
book1にセットします。 SaveAsメソッドで新しい名前で、読み取り専用を推奨して保存します。
バックアップを作成して保存
Sub SaveWithBackup()
Dim book1 As Workbook
Set book1 = Workbooks("Sample.xls")
book1.SaveAs Filename:="C:\excelsample\Sample_backup.xlsx", CreateBackup:=True
End Sub
処理の流れ
Workbookオブジェクトを宣言します。- 既存のブックを
book1にセットします。 SaveAsメソッドで新しい名前で、バックアップを作成して保存します。
名前をつけて保存に関するFAQ
以下は、Excel VBAでの名前をつけて保存に関するよくある質問とその回答です。
Q:SaveAsメソッドで保存する際に、既存のファイルを上書きしたくない場合はどうすればいいですか?
A:既存のファイルを上書きしないようにするには、SaveAsメソッドを実行する前に、目的のファイルがすでに存在するかどうかを確認するコードを追加することが有効です。Dir関数を使用してファイルの存在を確認できます。
Q:SaveAsメソッドで保存した後、元のブックを開いたままにする方法は?
A:SaveAsメソッドを使用すると、新しい名前で保存されたブックがアクティブになります。元のブックを開いたままにするには、SaveAsメソッド実行後にWorkbooks.Openメソッドで元のブックを再度開く必要があります。
Q:SaveAsメソッドで複数のシートを含むブックを保存する方法は?
A:SaveAsメソッドはWorkbookオブジェクトに対して適用されるため、複数のシートを含むブック全体が保存されます。シート単位での保存はSaveAsメソッドでは行えません。
Q:SaveAsメソッドで保存する際に、特定のシートだけをPDF形式で保存することは可能ですか?
A:はい、可能です。その場合はWorksheetオブジェクトのExportAsFixedFormatメソッドを使用します。このメソッドではPDF形式での出力も可能です。
Q:SaveAsメソッドで保存するときに、パスワードを設定する方法は?
A:SaveAsメソッドのPassword引数を使用して、保存するファイルにパスワードを設定できます。この引数に設定した文字列がパスワードとなります。
Q:SaveAsメソッドで保存する際に、読み取り専用を推奨する設定はどうやって行いますか?
A:SaveAsメソッドのReadOnlyRecommended引数をTrueに設定することで、読み取り専用を推奨する設定を行えます。
Q:SaveAsメソッドで保存する際に、バックアップを自動的に作成する方法は?
A:SaveAsメソッドのCreateBackup引数をTrueに設定することで、保存時にバックアップを自動的に作成できます。
Q:SaveAsメソッドでエラーが発生した場合、どうすればよいですか?
A:エラーが発生した場合、エラーハンドリングを行うコードを追加することが推奨されます。具体的には、On Error GoToステートメントを使用してエラーが発生した場合の処理を記述します。
関連動画
まとめ
Excel VBAでの名前をつけて保存は、SaveAsメソッドを使って非常に簡単に行えます。しかし、その背後には多くの引数と設定が存在し、それぞれがどのような働きをするのかを理解することが重要です。この記事で解説した各引数やサンプルコードを参考に、効率的なVBAプログラミングを行ってください。
