【VBA】名前をつけて保存を実行する方法|サンプルコード多数

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

処理の流れ

  1. Workbookオブジェクトを宣言します。
  2. 既存のブック(Sample.xls)をbook1にセットします。
  3. 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
  1. On Error Resume Nextを使用して、エラーが発生しても次の行に進むようにしています。
  2. book1Nothing(つまり、”Sample.xls”が開かれていない)場合には、メッセージボックスを表示してSubを終了します。
  3. 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

処理の流れ

  1. Workbookオブジェクトを宣言し、既存のブックをセットします。
  2. 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

処理の流れ

  1. Workbookオブジェクトを宣言し、既存のブックをセットします。
  2. SaveAsメソッドで新しい名前で、パスワードを設定して保存します。

サンプルコード集

ファイル形式を指定して保存

Sub SaveAsXlsx()
    Dim book1 As Workbook
    Set book1 = Workbooks("Sample.xls")
    book1.SaveAs Filename:="C:\excelsample\Sample.xlsx", FileFormat:=51
End Sub

処理の流れ

  1. Workbookオブジェクトを宣言します。
  2. 既存のブックをbook1にセットします。
  3. 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

処理の流れ

  1. Workbookオブジェクトを宣言します。
  2. 既存のブックをbook1にセットします。
  3. SaveAsメソッドで新しい名前で、パスワードを設定して保存します。

読み取り専用を推奨して保存

Sub SaveAsReadOnlyRecommended()
    Dim book1 As Workbook
    Set book1 = Workbooks("Sample.xls")
    book1.SaveAs Filename:="C:\excelsample\Sample_readonly.xlsx", ReadOnlyRecommended:=True
End Sub

処理の流れ

  1. Workbookオブジェクトを宣言します。
  2. 既存のブックをbook1にセットします。
  3. SaveAsメソッドで新しい名前で、読み取り専用を推奨して保存します。

バックアップを作成して保存

Sub SaveWithBackup()
    Dim book1 As Workbook
    Set book1 = Workbooks("Sample.xls")
    book1.SaveAs Filename:="C:\excelsample\Sample_backup.xlsx", CreateBackup:=True
End Sub

処理の流れ

  1. Workbookオブジェクトを宣言します。
  2. 既存のブックをbook1にセットします。
  3. 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プログラミングを行ってください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次