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

ファイル選択の種類を絞る(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ファイル。ファイルの種類による表示候補の説明例です。フォルダーの表示はこの表に含めません。

FileFilterの選択肢と表示候補(Excel実機の実行結果ではありません)
ファイルの種類表示する候補候補から外れるファイル
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画面ではありません。

  1. 候補を設定

    Excelブックはxlsx+xlsm、CSVは別の選択肢

  2. 1件選ぶ/キャンセル

    MultiSelect=False。キャンセルならBooleanを判定して終了

  3. パスだけ表示

    選択したファイルは開かず、セルや保存内容も変更しない

FilterIndex=1でExcelブック、2でCSVが初期表示になります。候補0件はファイルの種類・フォルダーを確認します。

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

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

    Windowsのデスクトップ版Excelと、組織で許可されたマクロ実行環境を使います。練習用.xlsmの標準モジュールにコードを貼り付けます。

  2. 2

    別の練習用フォルダーに売上.xlsx・集計.xlsm・明細.csv・メモ.txtを用意します。拡張子を付け替えず、それぞれ正しい形式で保存した無害なファイルを使います。

  3. 3

    Sample3050を実行し、そのフォルダーを開きます。初期状態はFilterIndex:=1なので「Excelブック」です。下の表と表示候補を比べます。

  4. 4

    「ファイルの種類」を「CSVファイル」に切り替え、明細.csvを1つ選びます。パスのメッセージだけが表示され、選んだファイルは開きません。

  5. 5

    再実行してキャンセルします。「選択をキャンセルしました。」で終了し、パスの表示には進みません。候補が0件のときも、種類・フォルダーを確認してから選択するかキャンセルします。

  6. 6

    最初からCSVを表示したい場合はFilterIndex:=2へ変更します。xlsxだけに絞る場合のFileFilterは「Excelブック (*.xlsx),*.xlsx」です。

  7. 7

    同じ候補に複数の拡張子を含める区切りはセミコロンです。別の選択肢を増やすには「表示名,パターン」の組をカンマで追加します。MultiSelectは選べるファイルの個数で、拡張子の数ではありません。

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