Applicationメソッド Application.GetSaveAsFilename

Application

Application.GetSaveAsFilename は、VBA(Visual Basic for Applications)において、ユーザーにファイルの保存先と名前を指定させるための 保存ダイアログボックス を表示する Excel Application オブジェクトのメソッド です。

このメソッドは、実際にファイルを保存するものではなく、保存するためのファイル名(パス)を取得するだけ です。実際の保存処理(例:Workbook.SaveAs など)は別途記述する必要があります。


🔷 基本構文

Application.GetSaveAsFilename( _
InitialFilename, _
FileFilter, _
FilterIndex, _
Title, _
ButtonText)

🔷 引数の詳細

引数名説明
InitialFilenameVariant(省略可)初期表示されるファイル名やパス
FileFilterVariant(省略可)保存対象のファイル形式(拡張子)と表示名
FilterIndexVariant(省略可)初期選択されるフィルターのインデックス番号(1から)
TitleVariant(省略可)ダイアログボックスのタイトル
ButtonTextVariant(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 型になります。比較には必ず <> FalseIsError などを使用してください。

If 保存名 <> False Then
' 保存処理
Else
MsgBox "保存がキャンセルされました"
End If

🔷 注意点・制約事項

注意点説明
実際には保存しないGetSaveAsFilename はファイルの保存処理をしない。別途 SaveAs が必要
拡張子の自動付与なし拡張子が省略されていれば自動で付く場合もあるが、基本的には開発者側で付けるのが安全
戻り値はVariant型比較時は <> False を使う
Macでは ButtonText 引数が有効Windowsでは ButtonText は無視される

🔷 まとめ

機能ユーザーにファイル名(保存先)を入力させるダイアログを表示
ファイルを保存するか?保存はしない(あくまでファイル名の取得)
返り値保存ファイル名(文字列)または False(キャンセル時)
よく使う用途保存前にユーザーに保存先を選ばせる、ファイル出力処理前に確認
実保存には?Workbook.SaveAsFileSystemObject.CreateTextFile などと併用

✅ よく使うテンプレート

Dim f As Variant
f = Application.GetSaveAsFilename("出力ファイル.xlsx", "Excelブック (*.xlsx), *.xlsx")
If f <> False Then
ThisWorkbook.SaveAs Filename:=f
End If
タイトルとURLをコピーしました