Excel VBAの「Dir 関数」について解説します。
Dir 関数とは
Excel VBA の Dir 関数は、指定したパターンに一致するファイルやフォルダの名前を返します。ファイルやフォルダの存在を確認したり、それらを検索して一覧を取得したりするために使う関数です。
Dir 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
Dir 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Dir[(pathname[, attributes])]
引数
引数 | 説明 |
---|---|
pathname | 【省略可能】ファイル名やフォルダ名を表す文字列式を指定します ※ ファイルやフォルダのパスを省略した場合は、 カレントフォルダのパス指定となります ※ 指定にワイルドカード (*) や (?) を使用できます |
attributes | 【省略可能】ファイル属性を定数または値で指定します ※ 組み合わせて複数の属性を指定できます(下表参照) |
※ 最初の呼び出しの際は pathname を省略できません。指定しないとエラーが発生します。
※ attributes ファイル属性も指定する場合は、pathname を指定する必要があります。
は次のとおりです。組み合わせて指定できます。
定数 | 値 | 説明 |
---|---|---|
vbNormal | 0 | 標準ファイル(既定値) |
vbReadOnly | 1 | 読み取り専用のファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システムファイル |
vbVolume | 8 | ボリュームラベル * |
vbDirectory | 16 | フォルダ |
【注意】規定値の「標準ファイル」は必ず指定されることに注意する必要があります!
例えば、vbDirectory を指定した場合、vbNormal も自動的に指定されているので、フォルダと同時に標準のファイル名も抽出されることになります。
戻り値
戻り値 | 説明 |
---|---|
文字列 (String) | 指定条件に一致する最初のファイルやフォルダの名前を返します |
※ 続けて次のファイルを取得したい場合、Dir 関数に引数を与えずに実行します。
※ pathname が見つからない場合は、長さが 0 の文字列 (“”) が返ります。
※ Dir 関数を再帰呼び出しすることはできません。
解説(使用例)
Dir 関数の基本的な使い方をサンプルで確認していきましょう。
Dir 関数サンプル (基本的な使用例)
指定したファイルやフォルダを検索する例を紹介します。
単一のファイルを検索する例
指定したファイルが存在しているかどうか確認する例です。
'■Dir関数使用例1(単一ファイル検索例)
Sub Dir_Sample01()
Dim fName As String
' 特定のファイルを検索
fName = Dir("C:\VBA_test\Sample_02.xls")
' 結果で処理を分岐
If fName <> "" Then
MsgBox "ファイル【" & fName & "】が見つかりました!"
Else
MsgBox "ファイルは見つかりませんでした。"
End If
End Sub
指定ファイルが見つかって表示された MsgBox 画像です。
このサンプルでは MsgBox を表示していますが、実務で使うVBAではここになんらかの処理(例えば、ファイルを実行するなど)を記述することになるでしょう。
特定パターンの複数ファイルを検索する例
指定した特定パターンのファイルを検索して該当するファイルをすべてリスト化して表示する例です。
'■Dir関数使用例2(複数ファイルの検索例)
Sub Dir_Sample02()
Dim fName As String
Dim fList As String 'ファイルリスト用
' 特定パターン「*.xls」のファイルを検索
fName = Dir("C:\VBA_test\*.xls")
' 検索結果を表示
If fName <> "" Then
fList = "見つかったファイル一覧:"
Do While fName <> ""
fList = fList & vbCrLf & fName
fName = Dir() ' 次のファイルを検索
Loop
MsgBox fList ' 見つかったファイル一覧を表示
Else
MsgBox "ファイルは見つかりませんでした。"
End If
End Sub
指定パターンの見つかったファイル一覧を表示して MsgBox 画像です。
・7行目で、最初の Dir 関数を特定のファイルパターン「*.xls」を指定して検索を実行しています。最初の Dir 関数では、複数のファイルがある場合ひとつ目のファイル名だけ取得して返します。
・12行目、Do While … Loop を使ってすべてのファイルに対して処理を行います。
・14行目、次のファイルを取得するために、引数なしで Dir 関数を再度実行します。
フォルダを検索する例
次にフォルダを取得する例です。attributes に 定数 vbDirectory または 値16を指定して検索します。
'■Dir関数使用例3(フォルダの検索例)
Sub Dir_Sample03()
Dim fName As String, path As String
Dim fList As String
' 検索するパスを指定
path = "C:\VBA_test\"
' パス直下のフォルダを検索
fName = Dir(path, vbDirectory)
' 検索結果を表示
If fName <> "" Then
fList = "見つかったフォルダ一覧:"
Do While fName <> ""
' "." と ".." は除外する
If fName <> "." And fName <> ".." Then
' フォルダかどうかを「GetAttr関数」で確認
If GetAttr(path & fName) = vbDirectory Then
fList = fList & vbCrLf & fName
End If
End If
fName = Dir() ' 次のフォルダを取得
Loop
MsgBox fList ' 見つかったフォルダ一覧を表示
Else
MsgBox "フォルダは見つかりませんでした。"
End If
End Sub
実行結果の MsgBox 画像です。3つのサブフォルダが存在していました。
・18行目で、GetAttr 関数を使ってフォルダだけ取得するようにしています。GetAttr 関数を使わなかった場合は、次の画像のようにフォルダ名だけでなくファイル名も一緒に抽出されることになります。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA の Dir 関数は、ファイルやフォルダの検索を行うための関数です。指定した条件に一致するファイルまたはフォルダの名前を含む文字列を返します。この関数を効果的に使用することで、ファイル管理やディレクトリ操作を簡単に行うことができます。
検索の際に注意する点として、引数 attributes は標準ファイルが規定値 (0) なので、他の定数(例えば vbDirectory (16) を指定した場合、標準ファイル+フォルダの両方が指定されている点です。必要に応じて3番目のサンプルのように、GetAttr 関数を使って絞り込む必要があります。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;