ファイル選択の種類を絞る(FileFilter・複数拡張子)
GetOpenFilenameのFileFilterで、xlsxとxlsmをまとめた候補・CSVだけの候補を切り替えます。FilterIndexの初期表示、カンマとセミコロンの違いを比較し、選んだパスだけを表示します。
実行前に確認
- この例は選択画面とメッセージ表示だけです。Workbooks.Openを使わず、ファイルの内容を読み込む・保存する処理はありません。
- FileFilterは表示候補の絞り込みで、安全性やファイル内容の検証ではありません。後続処理で使うなら信頼できるファイルか、期待する拡張子・内容かを別途確認します。
- 戻り値はVariantで受け、キャンセルのBooleanを先に判定します。MultiSelect:=Trueへ変えると1件の選択でも配列になるため、この単一選択コードのままCStrへ渡さないでください。
- ダイアログによってカレントドライブ・フォルダーが変わる場合があります。後続処理の相対パスの基準として決めつけないでください。
- 公式資料とコード・表示例の整合性を確認していますが、Excel実機での実行は未検証です。画面の文言や配置は環境で異なります。
1サンプルコード
Sub Sample3050()
Dim selectedPath As Variant
Dim filters As String
filters = "Excelブック (*.xlsx;*.xlsm),*.xlsx;*.xlsm," _
& "CSVファイル (*.csv),*.csv"
selectedPath = Application.GetOpenFilename( _
FileFilter:=filters, _
FilterIndex:=1, _
Title:="練習用ファイルの種類を切り替える", _
MultiSelect:=False)
If VarType(selectedPath) = vbBoolean Then
MsgBox "選択をキャンセルしました。"
Exit Sub
End If
MsgBox "選択したパス: " & CStr(selectedPath), vbInformation
End Sub同じフォルダーでも、候補が切り替わる
入力例:売上.xlsx・集計.xlsm・明細.csv・メモ.txtの4ファイル。ファイルの種類による表示候補の説明例です。フォルダーの表示はこの表に含めません。
| ファイルの種類 | 表示する候補 | 候補から外れるファイル |
|---|---|---|
| Excelブック:*.xlsx;*.xlsm | 売上.xlsx・集計.xlsm | 明細.csv・メモ.txt |
| CSVファイル:*.csv | 明細.csv | 売上.xlsx・集計.xlsm・メモ.txt |
| xlsxだけへ設定を変更:*.xlsx | 売上.xlsx | 集計.xlsm・明細.csv・メモ.txt |
「;」と「,」を使い分ける
セミコロンは同じ選択肢の拡張子をまとめます。カンマは「表示名」と「パターン」、さらに次の組を区切ります。上のコードにはExcelブックとCSVファイルの2つの選択肢があります。
選択した後はどうなる?
明細.csvを選んだ場合は、そのパスをメッセージに表示して終了します。キャンセルならキャンセルの案内だけです。GetOpenFilenameはファイルを開く処理ではありません。
図で見る選択肢を切り替えて、パスを確認
イメージ図ファイルの種類と戻り値の概念図です。実際のExcel画面ではありません。
候補を設定
Excelブックはxlsx+xlsm、CSVは別の選択肢
1件選ぶ/キャンセル
MultiSelect=False。キャンセルならBooleanを判定して終了
パスだけ表示
選択したファイルは開かず、セルや保存内容も変更しない
FilterIndex=1でExcelブック、2でCSVが初期表示になります。候補0件はファイルの種類・フォルダーを確認します。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する7つの手順で、コードの使い方を確認できます
- 1
Windowsのデスクトップ版Excelと、組織で許可されたマクロ実行環境を使います。練習用.xlsmの標準モジュールにコードを貼り付けます。
- 2
別の練習用フォルダーに売上.xlsx・集計.xlsm・明細.csv・メモ.txtを用意します。拡張子を付け替えず、それぞれ正しい形式で保存した無害なファイルを使います。
- 3
Sample3050を実行し、そのフォルダーを開きます。初期状態はFilterIndex:=1なので「Excelブック」です。下の表と表示候補を比べます。
- 4
「ファイルの種類」を「CSVファイル」に切り替え、明細.csvを1つ選びます。パスのメッセージだけが表示され、選んだファイルは開きません。
- 5
再実行してキャンセルします。「選択をキャンセルしました。」で終了し、パスの表示には進みません。候補が0件のときも、種類・フォルダーを確認してから選択するかキャンセルします。
- 6
最初からCSVを表示したい場合はFilterIndex:=2へ変更します。xlsxだけに絞る場合のFileFilterは「Excelブック (*.xlsx),*.xlsx」です。
- 7
同じ候補に複数の拡張子を含める区切りはセミコロンです。別の選択肢を増やすには「表示名,パターン」の組をカンマで追加します。MultiSelectは選べるファイルの個数で、拡張子の数ではありません。