- VBAで任意のファイルを選択して処理するにはどうすればいいの?
- ファイルダイアログから選択したい
- ファイルダイアログを開く方法が知りたい
そこで今回は、ファイルダイアログを表示して任意のファイルを選択できる「GetOpenFilename」メソッドのサンプルコード、その他の使い方について紹介します。
VBAでファイルダイアログを開くサンプルコード
'ファイルダイアログを開いてファイルを選択
Dim trgtFile As Variant
trgtFile = Application.GetOpenFileName("すべてのファイル (*.*),*.*")
If trgtFile = False Then
'「キャンセル」ボタンまたは「×」ボタンを押した時は「False」となる
MsgBox "ファイルが選択されていません。"
Else
'選択したファイルのフルパスをMsgBoxで表示
MsgBox trgtFile
End If
上記コードを実行すると、下記のファイルダイアログが表示されます。その後、ダイアログ上の処理によって「If文」を使って条件分岐しています。ファイルダイアログでファイルを指定した場合は、画像のMsgBoxでフルパスが表示されます。
ファイルを指定しなかった場合は、次の画像のMsgBoxが表示されます。
詳しい解説は次に続きます。
VBAでファイルダイアログを開くコードの解説
ファイルダイアログを開くGetOpenFileName
はじめに、今回のメインとなる「GetOpenFileName」メソッドについて解説します。'ファイルダイアログを開いてファイルを選択
Dim trgtFile As Variant
trgtFile = Application.GetOpenFileName("すべてのファイル (*.*),*.*")
上記コードは、ファイルダイアログを開く「GetOpenFileName」メソッドを変数「trgtFile」に定義しています。変数に定義することで「GetOpenFileName」メソッドで選択したファイル名を保持することができます。また「GetOpenFileName」メソッドは、ファイルを指定した時は「ファイル名フルパス」を文字列で返し、「キャンセル」や「×」を押した時には「False」を返すので、変数の型は「Variant」となります。
GetOpenFileNameの返り値を判定
続いて、ファイルダイアログを開いたあとの返り値を判定して、値によって処理を分岐させます。If trgtFile = False Then
'「キャンセル」ボタンまたは「×」ボタンを押した時は「False」となる
MsgBox "ファイルが選択されていません。"
Else
'選択したファイルのフルパスをMsgBoxで表示
MsgBox trgtFile
End If
「If trgtFile = False Then」の部分で、ファイルダイアログ上で「キャンセル」か「×」を押していないかを判定しています。「trgtFile = False」の場合、ファイルを選ばずにファイルダイアログを閉じているので、MsgBoxで「ファイルが選択されていません。」と表示します。何かファイルを指定した場合は、MsgBoxで指定したファイルのフルパスを表示します。
GetOpenFileNameの引数一覧
今回紹介した「GetOpenFileName」メソッドの引数一覧を紹介します。- 基本構文
Application.GetOpenFileName([FileFilter], [FilterIndex], [Titlee], [ButtonText], [MultiSelect])
- 引数一覧
引数名 | 省略 | 既定値 | 詳細 |
---|---|---|---|
FileFilter | 省略可 | “すべてのファイル (.),.“ | ファイル候補を指定(例は後述) |
FilterIndex | 省略可 | 最初のFileFilter | 複数のFileFilterを指定した場合に、何番目のFileFilterを規定にするかを指定 |
Title | 省略可 | “ファイルを開く” | ダイアログボックスのタイトルを指定 |
ButtonText | 省略可 | ー | Macでのみ指定可能 |
MultiSelect | 省略可 | False | True:複数のファイルを選択可能(返り値は配列) False:1つのファイルのみ選択可能(返り値は文字列) |
- 「FileFilter」に指定できる文字列の例
- “すべてのファイル (*.*),*.*”
- “CSVファイル(*.csv), *.csv”
- “テキストファイル (*.txt),*.txt”
- “Excel ファイル (*.xls),*.xls”
- “Excel ファイル (*.xlsx),*.xlsx”
- “Excel ファイル (*.xlsm),*.xlsm”
- “Excel ファイル (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm”
GetOpenFileNameのその他の使い方
デフォルトフォルダを設定する方法
'カレントフォルダを指定
ChDir "C:\Sample"
'ファイルダイアログを開いてファイルを選択
Dim trgtFile As Variant
trgtFile = Application.GetOpenFileName("すべてのファイル (*.*),*.*")
「GetOpenFileName」メソッドでファイルダイアログを開いた際に表示されるフォルダは「カレントフォルダ(作業中フォルダ)」です。このカレントフォルダの移動には「ChDir」を使用します。つまり、サンプルコードのように「GetOpenFileName」の直前で「ChDir」を実行することで、任意のフォルダをデフォルトフォルダとしてファイルダイアログを開くことができます。
ファイルではなくフォルダを選択する方法
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then
'「キャンセル」ボタンまたは「×」ボタンを押した時は「False」となる
MsgBox "フォルダが選択されていません。"
Else
'選択したフォルダのフルパスをMsgBoxで表示
Dim trgtFolder As Variant
trgtFolder = .SelectedItems(1)
MsgBox trgtFolder
End If
End With
ファイルではなくフォルダを選択したい時には、「GetOpenFileName」ではなく、「FileDialog」を使用します。サンプルコードでは、「FileDialog」の引数に「msoFileDialogFolderPicker」を指定して、フォルダを選択できるよう設定しています。また「キャンセル」か「×」を押した際には「False」を返すことを利用して、処理を分けています。
「False」を返す場合、つまりファイルを選択せず「キャンセル」か「×」を押した際は「フォルダが選択されていません。」とMsgBoxで表示します。
フォルダを選択した場合は「選択したフォルダのフルパス」をMsgBoxで表示します。
VBAでファイルダイアログを開くまとめ
今回はVBAでファイルダイアログを表示して任意のファイルを選択する「GetOpenFileName」メソッドと、あわせて知っておくと便利な応用を紹介しました。GetOpenFileNameとあわせて知っておきたい応用
基本的な使い方はもちろん、各種引数の使い方や上記の応用についても理解しておくと、操作しやすいマクロを作ることができるので、ぜひ覚えておきましょう。- デフォルトフォルダを設定する方法
- ファイルではなくフォルダを選択する方法