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プログラミングを行ってください。