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

