【VBA】ファイル選択ダイアログボックス

VBA

VBAでファイルを扱う際に、ダイアログボックスを開いてファイルを選択する方法を、ご説明いたします。

方法①:GetOpenFilenameメソッド

この方法は、Excel専用です。Accessでは使用できません

構文

Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

引数

引数必須/任意説明
FileFilter任意ファイルの候補を指定する文字列 (ファイル フィルター文字列) を指定します。
FilterIndex任意FileFilter で指定したファイル フィルター文字列の中で、
1 から何番目の値を既定値とするかを指定します。
この引数を省略するか、ファイル フィルター文字列の数より大きい数値を指定すると、
最初のファイル フィルター文字列が既定値となります。
Title任意ダイアログ ボックスのタイトルを指定します。
この引数を省略すると “ファイルを開く” になります。
ButtonText任意Macintosh でのみ指定できます。
MultiSelect任意True を指定すると、複数のファイルを選択できます。
False を指定すると、1 つのファイルしか選択できません。
既定値は False です。

戻り値

上記メソッドを実行すると、選択されたファイルのフルパスが、戻り値として返されます。
なお、ダイアログボックスで[キャンセル]ボタンをクリックすると、戻り値に「False」が返されます。

使用例①:引数を指定しない場合

Dim FileName As String

'ダイアログボックスを開く
FileName = Application.GetOpenFilename

'FileNameを使う処理
MsgBox FileName

実行結果

(ファイルを選択)

選択したファイルのフルパスが返された

使用例②:引数を指定する場合

よく使う引数として、FileFilterとTitleを指定したサンプルをご紹介いたします。
引数FileFilterでは、ダイアログボックスに表示したい文字列と、ワイルドカードを、下記の例のようにカンマ(,)で区切ります。

Dim FileName As String

FileName = Application.GetOpenFilename(FileFilter:="テキストファイル,*.txt", _
                                       Title:="テキストファイルを選択して下さい")
MsgBox FileName

実行結果

以下のように、「*.txt」に該当するファイルのみが表示され、ダイアログボックスのタイトルも設定されました。

初期表示されるフォルダについて

ダイアログを開いたときに初期表示されるフォルダは、PCに依存します。
初期表示されるフォルダを指定するには、以下のように

ChDir フォルダ名

を事前に実行する必要があります。

Dim FileName As String

ChDir "c:\work"
FileName = Application.GetOpenFilename
MsgBox FileName

方法②:FileDialogオブジェクト

この方法は、Excel・Accessともに使用可能です。
また、GetOpenFilenameよりも、色々な制御ができます。

構文

Application.FileDialog(fileDialogType)

引数

以下のいずれかの定数を指定します。

定数説明
msoFileDialogFilePickerファイルを選択する
msoFileDialogFolderPickerフォルダを選択する
msoFileDialogOpenファイルを開く ※Excel専用
msoFileDialogSaveAsファイルを保存する ※Excel専用

補足説明

様々なプロパティを設定して、ダイアログボックスを制御できます。
以下の使用例に載せたプロパティを知っていれば、十分かと思います。
もちろん、全て設定する必要は無く、必要なプロパティだけ設定すれば良いです。
プロパティの説明を、コメントに記述しておきました。

Showメソッドを実行すると、ダイアログボックスが表示されます。
[開く]がクリックされると True が返され、[キャンセル]がクリックされると False が返されます。

Showメソッドでダイアログボックスを表示後に、Executeメソッドを実行すると、以下の処理が行われます。

  • Excelで引数にmsoFileDialogOpenを指定した場合は、選択したファイルが開かれます。
  • Excelで引数にmsoFileDialogSaveAsを指定した場合は、ダイアログボックスで指定したファイル名で、ブックが保存されます。
  • 上記以外の引数、およびAccessの場合にExecuteメソッドを実行すると、エラーになります。

使用例

With Application.FileDialog(msoFileDialogOpen)
    '表示するファイルの種類を設定
    .Filters.Clear
    .Filters.Add "テキストファイル", "*.txt"
    
    '初期表示されるフォルダを指定 ※後ろに「\」が必要です
    .InitialFileName = "C:\work\"
    
    '複数選択を許可しない ※「True」で許可します
    .AllowMultiSelect = False
    
    'ダイアログボックスのタイトルを指定
    .Title = "ファイルを選択して下さい"
    
    ‘ダイアログボックスを表示
    If .Show = True Then
        '[開く]がクリックされた場合
        'ファイルを開く
        .Execute
        '選択されたファイルのフルパスを表示
        MsgBox .SelectedItems(1)
    Else
        '[キャンセル]がクリックされた場合
        MsgBox "キャンセルされました。"
    End If
End With

実行結果

(ファイルを選択)

選択したファイルが開かれた

選択したファイルのフルパスが返された

コメント

タイトルとURLをコピーしました