Dir 関数は指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列 (String型) を返します。引数 Attributes にはファイルの属性を表す定数を複数個加算して指定することができます。
Dir関数の使用方法
引数名 | 省略 | 説明 |
---|---|---|
PathName | ○ | ファイル名を表す文字列式を指定します。 フォルダ名およびドライブ名も含めて指定できます。 引数 PathName に指定した内容が見つからないときは、長さ 0 の文字列 (” “) を返します。 |
Attributes | ○ | 取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。 |
定数 | 値 | 説明 |
---|---|---|
vbNormal | 0 | 標準ファイル(既定値) |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システム ファイル※Windowsのみ |
vbVolume | 8 | ボリューム ラベル※Windowsのみ |
vbDirectory | 16 | フォルダ |
vbAlias | 64 | エイリアス ファイル※Macintoshのみ |
Dir関数の主な用途
- ファイル存在チェック
引数 PathName にファイルパスを指定して戻り値で判断します。 ファイルが存在すると何かしらの文字列(ファイル名)が返ってきます。存在しなければ長さ 0 の文字列 (“”) が返ってきます。 引数 Attributes には必要に応じてファイルの属性(読み取り専用など)を指定します。 - フォルダの存在チェック
引数 PathName にフォルダパス、引数 Attributes に vbDirectory を指定して戻り値で判断します。 フォルダが存在すると何かしらの文字列(フォルダ名)が返ってきます。存在しなければ長さ 0 の文字列 (“”) が返ってきます。 - あるパターンにマッチするファイル名の取得
引数 PathName にファイルパスのパターン(ワイルドカード含む)、 引数 Attributes に取得したいファイル属性を指定してDir関数を呼び出すことで、パターンにマッチするファイル名を取得できます。 2回目以降は引数は省略することで初回に設定した同一パターン、同一ファイル属性の次のファイル名を連続して取得することができます。 - あるフォルダ内のサブフォルダ・ファイルの一覧取得
引数 PathName にフォルダパス、引数 Attributes に vbDirectory 他、必要なファイル属性を指定して Dir関数を呼び出すことで、フォルダ内のサブフォルダおよびファイル名を取得することができます。 2回目以降は引数は省略してDir関数を使用します。
Dir関数の使用例
ファイルの存在チェック
ファイルの存在チェックをする例です。チェック対象のファイルが標準ファイルであることが分かっている場合、引数 Attributes は省略することができます。読み取り専用や隠しファイルである可能性がある場合、引数 Attributes には”vbReadOnly + vbHidden”を指定します。
※vbNormal は値がゼロのため、指定してもしなくても第2引数の合計値はかわりません。
Sub sample_ef071_01()
Dim myFile As String
Dim strRtn As String
myFile = "C:¥Users¥Public¥vba¥test1.xlsx"
'第2引数省略時はvbNormalが既定値になります。
strRtn = Dir(myFile)
Debug.Print "Dir関数戻り値:" & strRtn
If strRtn = "" Then
Debug.Print "ファイルは存在しません。"
Else
Debug.Print "ファイルは存在します。"
End If
End Sub
テスト用フォルダ『C:¥Users¥Public¥vba』は下図のようになっています。
上記サンプルマクロを実行すると、Dir関数から”test1.xlsx”が返ってきます。
フォルダの存在チェック
フォルダの存在をチェックする例です。引数 Attributes には”vbDirectory”を指定します。
Sub sample_ef071_02()
Dim myFile As String
Dim strRtn As String
myFile = "C:¥Users¥Public¥vba¥folder1"
strRtn = Dir(myFile, vbDirectory)
Debug.Print "Dir関数戻り値:" & strRtn
If strRtn = "" Then
Debug.Print "フォルダは存在しません。"
Else
Debug.Print "フォルダは存在します。"
End If
End Sub
テスト用フォルダ『C:¥Users¥Public¥vba』は下図のようになっています。
上記サンプルマクロを実行すると、Dir関数から”folder1”が返ってきます。
パターンマッチ
パターンマッチの例です。ファイル名にワイルドカードを使用してファイル名のパターンを設定します。2回目以降Dir関数を使用する場合は引数を省略します。
Sub sample_ef071_03()
Dim myFile As String
Dim strRtn As String
myFile = "C:¥Users¥Public¥vba¥test*.*"
'初回検索
strRtn = Dir(myFile, vbReadOnly + vbHidden)
Do Until strRtn = ""
Debug.Print "Dir関数戻り値:" & strRtn
'2回目以降は引数を省略してDir関数を使用
strRtn = Dir
Loop
End Sub
テスト用フォルダ『C:¥Users¥Public¥vba』は下図のようになっています。
上記サンプルマクロを実行すると、Dir関数から”test”から始まるファイル2つが返ってきます。
サブフォルダ・ファイル一覧表示
サブフォルダ・ファイル(読み取り専用と隠しファイルを含む)を一覧表示する例です。Dir関数の戻り値として”.”と”..”が返ってきますが、これらはそれぞれカレントフォルダと親フォルダを意味しています。処理の中では特に使用しませんので、表示処理をバイパスするようにしています。
Sub sample_ef071_04()
Dim myFile As String
Dim strRtn As String
'最後の"*"はなくてもよいです。
myFile = "C:¥Users¥Public¥vba¥*"
'初回検索
strRtn = Dir(myFile, vbReadOnly + vbHidden + vbDirectory)
Do Until strRtn = ""
Select Case strRtn
Case ".", ".."
'カレントフォルダと親フォルダの場合は出力しない。
Case Else
Debug.Print "Dir関数戻り値:" & strRtn
End Select
'2回目以降は引数を省略してDir関数を使用
strRtn = Dir
Loop
End Sub
Do…Loop Select Case による複数の条件分岐
テスト用フォルダ『C:¥Users¥Public¥vba』は下図のようになっています。
上記サンプルマクロを実行すると、Dir関数からフォルダ内のファイルやサブフォルダが返ってきます。