← コード一覧へ戻る
実務ダイアログ

ファイルを選択してパスだけ取得する(GetOpenFilename)

VBAのGetOpenFilenameでxlsxを1件選び、開かずにフルパスを表示します。Variantで戻り値を受け取り、選択・キャンセル・取得失敗を分ける例です。

実行前に確認

  • GetOpenFilenameの名前にOpenがあっても、返すのはファイル名とパスです。実際に開く処理はWorkbooks.Openなどを別に実行します。この練習には含めません。
  • 戻り値はVariantで受け取ります。キャンセルはBooleanのFalseなので、CStrで文字列として扱う前に判定して終了します。選択画面の×で閉じた場合もキャンセルです。
  • MultiSelect:=Falseは1件選択です。Trueに変えると、1件を選んだ場合も配列になるため、このコードのままCStrで扱わないでください。
  • ファイル候補が見えないときは、表示フォルダーと拡張子xlsxを確認します。ファイルの種類を切り替える設定は関連する3050で扱います。拡張子のフィルターはファイルの安全性を保証しません。
  • 取得中の実行時エラーはエラー番号・説明を表示して終了します。正常なキャンセルと混同せず、表示された内容と設定を確認してください。
  • このメソッドは現在のドライブやフォルダーを変更する場合があります。後続処理では取得したフルパスを使い、相対パスや現在のフォルダーに依存しないようにします。
  • Excel for the webではVBAを実行できません。コードと説明は公式仕様に照合しましたが、Excel実機での実行は未検証です。

1サンプルコード

Sub Sample3045()
    Dim selectedPath As Variant
    On Error GoTo SelectionError

    selectedPath = Application.GetOpenFilename( _
        FileFilter:="Excelブック (*.xlsx),*.xlsx", _
        Title:="パスを確認するファイルを選択", _
        MultiSelect:=False)

    If VarType(selectedPath) = vbBoolean Then
        MsgBox "選択をキャンセルしました。"
        Exit Sub
    End If

    MsgBox "選択したパス: " & CStr(selectedPath), vbInformation
    Exit Sub

SelectionError:
    MsgBox "パスの取得を完了できませんでした。" & vbCrLf _
        & "エラー番号: " & Err.Number & vbCrLf _
        & Err.Description, vbExclamation
End Sub

選択した後の3つの結果

同じコードを実行したときの説明例です。パスは架空の値で、実際のExcel画面や実行結果ではありません。

操作・戻り値・次の処理の対応
操作・状態受け取る値この例の結果
練習用.xlsxを選択文字列:C:\VBA練習\練習用.xlsxパスを表示して終了。ファイルは開かない
キャンセル/×で閉じるBoolean:Falseキャンセルの案内で終了。後続処理へ進まない
取得中に実行時エラー正常な戻り値として扱わないエラー番号と説明を表示して終了

「選ぶ」と「開く」は別の処理

この例で分かるのは、どのファイルを選んだかです。中身を調べる、ブックを開く、セルを更新する処理はまだ行っていません。選択後の処理を追加する前に、パスと処理対象を確認しましょう。

図で見る選ぶ → 戻り値を分ける → パスを確認

イメージ図

ファイル内容を読み込まず、保存先の文字列を確認する概念図です。

  1. 選択画面を表示

    xlsxを1件選択。最初の練習はキャンセルでもOK

  2. 戻り値を判定

    選択なら文字列/キャンセルならFalse。取得失敗は別のエラー処理へ

  3. パスだけ表示

    例:C:\VBA練習\練習用.xlsx。ブックは開かない

選択・キャンセル・取得失敗の結果を上の表で確認できます。セルやファイルを書き換える処理はありません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelで、自作の練習用.xlsxとマクロ用の練習.xlsmを用意します。マクロは組織のルールで許可された環境で実行してください。

  2. 2

    Alt+F11 →[挿入]→[標準モジュール]にコードを貼り付け、Sample3045を実行します。最初は[キャンセル]を押し、キャンセルの案内で終わることを確認します。

  3. 3

    もう一度実行して練習用.xlsxを選びます。例えばC:\VBA練習\練習用.xlsxのような保存先を含むパスが表示されます。サンプルには固定パスを書き換える箇所はありません。

  4. 4

    表示したパスが選んだファイルと一致し、そのファイルが新しく開かれていないことを確認します。この例はセルへの書き込み・保存・ファイル内容の読み込みも行いません。

  5. 5

    次にブックを開く処理へ進む場合は、関連する「ブックを開く」の例を確認します。取得したパスのファイルが移動・削除された場合や読み取り権限がない場合は、選択できたことだけでは開ける保証になりません。

使っている機能の公式ドキュメント(Microsoft Learn)