マクロで作成したレポートなどを保存する際、ファイル名を固定するのではなく、マクロの実行者にファイル名や保存場所、ファイルの種類(xlsxやpdfなど)を自由に決めてもらいたい、という場合があります。
VBAの**Application.GetSaveAsFilenameメソッド**を使えば、「名前を付けて保存」のダイアログボックスを表示し、ユーザーが入力した保存パスを文字列として取得できます。
この記事では、このメソッドの基本的な使い方と、実際にファイルを保存するまでの応用方法を解説します。
完成したVBAコード
Sub ShowFileSaveAsDialog()
' 変数を宣言します。戻り値はパス(文字列)かFalse(ブール値)のため、Variant型にします。
Dim saveFilePath As Variant
Dim initialFileName As String
'--- 1. ダイアログの初期値を設定 ---
' あらかじめ、デフォルトのファイル名を提案しておく
initialFileName = ThisWorkbook.Path & "\Report_" & Format(Date, "yyyymmdd") & ".xlsx"
'--- 2. 「名前を付けて保存」ダイアログボックスを表示 ---
saveFilePath = Application.GetSaveAsFilename( _
InitialFileName:=initialFileName, _
FileFilter:="Excel ブック (*.xlsx),*.xlsx,CSV (カンマ区切り) (*.csv),*.csv", _
Title:="レポートの保存先を選択してください")
'--- 3. 選択結果を判定 ---
If saveFilePath = False Then
' 「キャンセル」が押された場合
MsgBox "保存はキャンセルされました。"
Else
' ファイルパスが指定された場合
MsgBox "以下のパスで保存が指定されました。" & vbCrLf & saveFilePath
End If
End Sub
コードのポイント解説
① Application.GetSaveAsFilename メソッド
このメソッドを実行すると、「名前を付けて保存」ダイアログが表示されます。最も重要なのは、このメソッドはファイルを実際に保存するわけではなく、ユーザーが指定した保存先のフルパスを文字列として返すだけ、という点です。
② InitialFileName 引数
ダイアログが表示された際に、ファイル名入力欄にあらかじめ表示しておくデフォルトのファイル名やパスを指定できます。ユーザーの手間を省くための親切な設定です。
③ FileFilter 引数
ダイアログの「ファイルの種類」ドロップダウンリストの内容を設定します。GetOpenFilenameと同じ形式で、"表示名,*.拡張子"のペアをカンマ区切りで指定します。
④ キャンセルされた場合の処理
If saveFilePath = False Then
ユーザーがダイアログで「キャンセル」ボタンを押した場合、このメソッドは**ブール値のFalse**を返します。戻り値を受け取る変数をVariant型で宣言し、If文でFalseかどうかを判定することで、キャンセル時の処理を正しく分岐させることができます。
【応用】指定されたパスにブックを実際に保存する
GetSaveAsFilenameで取得したファイルパスを、SaveAsメソッドと組み合わせることで、「ユーザーが選んだ場所に、選んだ名前でファイルを保存する」という一連の動作が完成します。
Sub GetPathAndSaveFile()
Dim savePath As Variant
' 1. まず、GetSaveAsFilenameで「保存パス」だけを取得
savePath = Application.GetSaveAsFilename(InitialFileName:="NewReport.xlsx")
' 2. キャンセルされなかった場合、取得したパスを使って実際にブックを保存
If savePath <> False Then
' ここでは例として、このマクロブック自身を別名で保存
ThisWorkbook.SaveAs Filename:=savePath
MsgBox "ブックを「" & savePath & "」に保存しました。"
Else
MsgBox "保存はキャンセルされました。"
End If
End Sub
まとめ
Application.GetSaveAsFilenameメソッドは、ユーザーに保存場所を委ねる柔軟なマクロを作成する際に不可欠な機能です。
- 戻り値は**ファイルのフルパス(文字列)**であり、それ自体に保存機能はない。
InitialFileName引数で、推奨ファイル名を提示できる。- 戻り値が**
Falseかどうか**で、キャンセル操作を判定する。 - 実際の保存には、取得したパスを**
SaveAs**メソッドに渡す必要がある。
これらのポイントを押さえることで、より対話的でユーザーフレンドリーなVBAツールを作成することができます。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
