Application.GetSaveAsFilename
は、VBA(Visual Basic for Applications)において、ユーザーにファイルの保存先と名前を指定させるための 保存ダイアログボックス を表示する Excel Application オブジェクトのメソッド です。
このメソッドは、実際にファイルを保存するものではなく、保存するためのファイル名(パス)を取得するだけ です。実際の保存処理(例:Workbook.SaveAs
など)は別途記述する必要があります。
🔷 基本構文
Application.GetSaveAsFilename( _
InitialFilename, _
FileFilter, _
FilterIndex, _
Title, _
ButtonText)
🔷 引数の詳細
引数名 | 型 | 説明 |
---|---|---|
InitialFilename | Variant(省略可) | 初期表示されるファイル名やパス |
FileFilter | Variant(省略可) | 保存対象のファイル形式(拡張子)と表示名 |
FilterIndex | Variant(省略可) | 初期選択されるフィルターのインデックス番号(1から) |
Title | Variant(省略可) | ダイアログボックスのタイトル |
ButtonText | Variant(Macのみ有効) | ボタンのラベル(Windowsでは無視) |
🔷 戻り値
- ユーザーが「保存」ボタンを押した場合:選択されたファイル名(完全パス)
- ユーザーがキャンセルした場合:
False
戻り値の型は Variant
です。必ず If 戻り値 <> False Then
のようにチェックしましょう。
🔷 使用例①:基本的な使い方
Sub 保存先を選ぶ()
Dim 保存ファイル名 As Variant
保存ファイル名 = Application.GetSaveAsFilename( _
InitialFilename:="新規ファイル.xlsx", _
FileFilter:="Excelファイル (*.xlsx), *.xlsx", _
Title:="保存ファイル名を指定してください")
If 保存ファイル名 <> False Then
MsgBox "保存される予定のファイル名:" & 保存ファイル名
' 保存処理例:
' ActiveWorkbook.SaveAs Filename:=保存ファイル名
Else
MsgBox "キャンセルされました"
End If
End Sub
🔷 使用例②:複数のファイルタイプを設定
Dim fName As Variant
fName = Application.GetSaveAsFilename( _
FileFilter:="Excelブック (*.xlsx), *.xlsx, CSVファイル (*.csv), *.csv", _
FilterIndex:=1)
If fName <> False Then
MsgBox "保存パス: " & fName
End If
🔷 FileFilter の構文と注意点
"説明, 拡張子, 説明2, 拡張子2, ..."
という ペアで指定します。
例:
"Excelファイル (*.xlsx), *.xlsx, CSVファイル (*.csv), *.csv"
*.xlsx
や*.csv
のようにワイルドカード形式で記述- 記述ミスがあるとダイアログが表示されないことがあるので注意
🔷 保存処理との組み合わせ例
Sub ファイルを保存()
Dim 保存名 As Variant
保存名 = Application.GetSaveAsFilename("データ出力.csv", "CSVファイル (*.csv), *.csv")
If 保存名 <> False Then
ActiveWorkbook.SaveAs Filename:=保存名, FileFormat:=xlCSV
End If
End Sub
このように、GetSaveAsFilename
で得たファイルパスを使って、実際にファイルを保存するには SaveAs
メソッドと併用します。
🔷 キャンセル時の処理に注意
キャンセルされた場合には False
が返るため、戻り値の型が String
ではなく Variant
型になります。比較には必ず <> False
や IsError
などを使用してください。
If 保存名 <> False Then
' 保存処理
Else
MsgBox "保存がキャンセルされました"
End If
🔷 注意点・制約事項
注意点 | 説明 |
---|---|
実際には保存しない | GetSaveAsFilename はファイルの保存処理をしない。別途 SaveAs が必要 |
拡張子の自動付与なし | 拡張子が省略されていれば自動で付く場合もあるが、基本的には開発者側で付けるのが安全 |
戻り値はVariant型 | 比較時は <> False を使う |
Macでは ButtonText 引数が有効 | Windowsでは ButtonText は無視される |
🔷 まとめ
機能 | ユーザーにファイル名(保存先)を入力させるダイアログを表示 |
---|---|
ファイルを保存するか? | 保存はしない(あくまでファイル名の取得) |
返り値 | 保存ファイル名(文字列)または False (キャンセル時) |
よく使う用途 | 保存前にユーザーに保存先を選ばせる、ファイル出力処理前に確認 |
実保存には? | Workbook.SaveAs や FileSystemObject.CreateTextFile などと併用 |
✅ よく使うテンプレート
Dim f As Variant
f = Application.GetSaveAsFilename("出力ファイル.xlsx", "Excelブック (*.xlsx), *.xlsx")
If f <> False Then
ThisWorkbook.SaveAs Filename:=f
End If