[ファイルを開く]ダイアログのフィルタリング


Excelで開くブックをユーザーに選択してもらうとき、ApplicationオブジェクトのGetOpenFilenameメソッドを使うと便利です。

Sub Sample1()
    Dim OpenFile As String
    OpenFile = Application.GetOpenFilename("Excelブック,*.xls")
    MsgBox OpenFile & " を開きます"
End Sub

[ファイルを開く]ダイアログボックスには、カレントフォルダが表示されますので任意のフォルダを指定して開くには、次のようにカレントフォルダを移動してからGetOpenFilenameメソッドを実行します。

Sub Sample2()
    Dim OpenFile As String
    ChDir "C:\Tmp"
    OpenFile = Application.GetOpenFilename("Excelブック,*.xls")
    MsgBox OpenFile & " を開きます"
End Sub

GetOpenFilenameメソッドの引数「Excelブック,*.xls」は、拡張子がxlsのファイルだけをダイアログボックスに表示させるための設定です。このように、拡張子を指定したファイルのフィルタリングは可能ですが、たとえば「"2007年"で始まるファイルだけ」とか「"企画"という文字が含まれるファイルだけ」のような設定は、GetOpenFilenameメソッドではできません。

どうしてもファイル名によるフィルタリングを行いたいのでしたら、Excelの組み込みダイアログボックスを表すDialogsコレクションを使う手があります。Dialogsコレクションを使って[ファイルを開く]ダイアログボックスを表示するには次のようにします。

Sub Sample3()
    Application.Dialogs(xlDialogOpen).Show
End Sub

Dialogsコレクションで表示する[ファイルを開く]ダイアログボックスは、GetOpenFilenameメソッドとは違い、[OK]ボタンをクリックするとただちに開かれます。

このとき、Showメソッドの第一引数にはファイル名を指定できます。そこで、このファイル名に「2007年*.xls」や「*企画*.xls」などと指定することで任意のファイル名だけをダイアログボックスに表示することが可能です。

Sub Sample4()
    Application.Dialogs(xlDialogOpen).Show "*企画*.xls"
End Sub