ファイルを選択してパスだけ取得する(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 | キャンセルの案内で終了。後続処理へ進まない |
| 取得中に実行時エラー | 正常な戻り値として扱わない | エラー番号と説明を表示して終了 |
「選ぶ」と「開く」は別の処理
この例で分かるのは、どのファイルを選んだかです。中身を調べる、ブックを開く、セルを更新する処理はまだ行っていません。選択後の処理を追加する前に、パスと処理対象を確認しましょう。
図で見る選ぶ → 戻り値を分ける → パスを確認
イメージ図ファイル内容を読み込まず、保存先の文字列を確認する概念図です。
選択画面を表示
xlsxを1件選択。最初の練習はキャンセルでもOK
戻り値を判定
選択なら文字列/キャンセルならFalse。取得失敗は別のエラー処理へ
パスだけ表示
例:C:\VBA練習\練習用.xlsx。ブックは開かない
選択・キャンセル・取得失敗の結果を上の表で確認できます。セルやファイルを書き換える処理はありません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する5つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelで、自作の練習用.xlsxとマクロ用の練習.xlsmを用意します。マクロは組織のルールで許可された環境で実行してください。
- 2
Alt+F11 →[挿入]→[標準モジュール]にコードを貼り付け、Sample3045を実行します。最初は[キャンセル]を押し、キャンセルの案内で終わることを確認します。
- 3
もう一度実行して練習用.xlsxを選びます。例えばC:\VBA練習\練習用.xlsxのような保存先を含むパスが表示されます。サンプルには固定パスを書き換える箇所はありません。
- 4
表示したパスが選んだファイルと一致し、そのファイルが新しく開かれていないことを確認します。この例はセルへの書き込み・保存・ファイル内容の読み込みも行いません。
- 5
次にブックを開く処理へ進む場合は、関連する「ブックを開く」の例を確認します。取得したパスのファイルが移動・削除された場合や読み取り権限がない場合は、選択できたことだけでは開ける保証になりません。