【Excel VBA】「名前を付けて保存」ダイアログを表示してパスを取得する方法 (GetSaveAsFilename)

マクロで作成したレポートなどを保存する際、ファイル名を固定するのではなく、マクロの実行者にファイル名や保存場所、ファイルの種類(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ツールを作成することができます。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次