ファイル選択時のフィルタ設定

広告

ファイル選択ダイアログを表示する時に、ダイアログ内に表示されるファイルをフィルタして表示することが出来ます。デフォルトでは全てのファイルが表示されるようになっていますが、拡張子が「.xls」のファイルだけを表示するようにしたり、「.bas」のファイルだけを表示したりするように設定できます。

フィルタを設定するには「GetOpenFilename」メソッドに「FileFilter」引数に設定します。

Dim fname As String

fname = Application.GetOpenFilename( _
    FileFilter:="Excelファイル, *.xls")

フィルタは次の規則に従って記述します。

フィルタ文字列, ワイルドカード

フィルタ文字列は、表示される拡張子を持つファイルが何のファイルなのか分かりやすいように、任意の文字列を指定します。そしてファイル一覧として表示したいファイルを表すワイルドカードを指定します。例えば拡張子が「.xls」のファイルだけ表示したい場合には「*.xls」と記述します。

"Excelファイル, *.xls"

上記のように設定した場合、ダイアログには次のように表示されます。

ファイル選択ダイアログのフィルタ

ダイアログの下部の「ファイルの種類」の箇所に設定したフィルタの内容が表示されます。そして、表示されるファイルの一覧はワイルドカードで指定されたフィルタに適合するファイルだけが表示されています。

複数のフィルタを設定する

設定できるフィルタは1つだけではなく、複数のフィルタを設定し、ユーザーに選択してもらうことができます。複数のフィルタを設定するには、カンマ(,)で区切って並べて記述します。

フィルタ文字列1, ワイルドカード1, フィルタ文字列2, ワイルドカード2, ...

具体的には次のような記述となります。

"Excelファイル, *.xls, 全てのファイル, *.*"

このように記述した場合、利用者が「Excelファイル」を選択すれば拡張子が「.xls」のファイルだけが表示され、「全てのファイル」を選択すれば全てのファイルが表示されるようになります。

ファイル選択ダイアログのフィルタ

上記で「全てのファイル」を選択すると次のようになります。

ファイル選択ダイアログのフィルタ

1つのフィルタに複数の拡張子を設定する

1つのフィルタで複数の拡張子を対応させることもできます。例えば「Excelファイル」には拡張子として「.xls」の他に「.bas」のファイルも表示させたい場合には、拡張子をセミコロン(;)で区切って指定します。

フィルタ文字列, ワイルドカード1;ワイルドカード2

具体的には次のように記述します。

"全てのExcelファイル, *.xls;*.bas"

このフィルタを使用した場合には拡張子が「.xls」と「.bas」のファイルだけが表示されます。

最初に表示されるフィルタ

複数のフィルタを記述した場合、ファイル選択ダイアログが開いた時には一番目に記述されたフィルタがまず適用されて表示されています。このデフォルトで選択されるフィルタを指定することが可能です。

デフォルトで指定されるフィルタを指定するには「GetOpenFilename」メソッドに「FilterIndex」引数に設定します。

Dim fname As String

fname = Application.GetOpenFilename( _
    FileFilter:="Excelファイル,*.xls,全てのファイル,*.*", _
    FilterIndex:=2)

指定する値はフィルタを記述した順に1,2,...となります。よって2番目のフィルタをデフォルトで適用するには「FilterIndex」引数に「2」を指定します。

サンプルプログラム

では簡単なサンプルで試してみましょう。

testbooknew4.bas

Sub テスト()
    
    Dim fname As String

    fname = Application.GetOpenFilename( _
        FileFilter:="Excelファイル,*.xls,全てのファイル,*.*", _
        FilterIndex:=1)
    
End Sub

上記マクロを実行すると次のようになります。

ファイル選択ダイアログのフィルタ

上記のように設定したフィルタに該当するファイルだけが表示されています。(今回はファイル選択しても何も行いません)。

Excel VBA入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)