
VBAのDir関数とは?関数の解説と使用例
Dir関数は、「ディレクトリ内に指定したファイルが存在するか」や「ディレクトリ配下にあるディレクトリ名やファイル名を取得したい」時に使用します。
目次
1.Dir関数について
1-1.Dir関数とは
指定した条件(パターン、ファイル属性)に一致するファイルまたはディレクトリ、フォルダ名、またはドライブのボリュームラベルをString型で返します。
1-2.Dir関数の構文
Dir [pathname] [attributes]
1-2-1.引数pathname
省略可能。ファイル名、フォルダ名を指定します。ファイル名のみを指定した場合は、長さ0の文字列を返します。
1-2-2.引数attributes
省略可能。省略した場合は、pathnameと同じ属性のファイルを返します。下記表にあるファイル属性を指定する定数か値を指定します。
定数名 | 値 | 説明 |
vbNormal | 0 | 属性のないファイル。 省略した場合は、自動的にこの設定になります。 |
vbReadOnly | 1 | 属性のないファイルと読み取り専用のファイル。 |
vbHidden | 2 | 属性のないファイルと隠しファイル。 |
vbSystem | 4 | 属性のないファイルとシステム ファイル。 Macintosh では使用できません。 |
vbVolume | 8 | ボリューム ラベル 他の属性を指定した場合は、vbVolume は無視。 Macintosh では使用できません。 |
vbDirectory | 16 | 属性のないファイルとディレクトリまたはフォルダ。 |
vbAlias | 64 | 指定されたファイル名はエイリアス。 Macintosh でのみ使用可能。 |
※:属性とは、「読み取り専用」「システムファイル」「ディレクトリ」「隠し属性」等のことです。
2.Dir関数の使用例
2-1.基本的な使用例
Cドライブ直下に下記のようなディレクトリ構成があるとき、Cドライブ直下で実行した例を記していきます。
2-1-1.引数pathnameのみを指定
Sub sample01() Dim str As String str = Dir("C:\SAMPLE\SAMPLE.txt") MsgBox str End Sub
実行結果:第一引数で指定したファイルを検索し、存在した場合はファイル名を返します。
2-1-2.引数pathnameが空、attributesを指定
Sub sample02() Dim str As String str = Dir("", vbDirectory) MsgBox str End Sub
実行結果:Cドライブ直下にある、最初に見つかったディレクトリ名を返します。
2-1-3.ワイルドカードを使った検索
Sub sample03() Dim str As String str = Dir("C:¥SAMPLE\t*") MsgBox str End Sub
実行結果:指定したディレクトリパス(C:¥SAMPLE)配下にある最初に「t」が付くファイル名を返します。
2-2.その他の使用例
2-2-1.指定したパスにファイルやディレクトリが複数存在した場合
対象となるファイルが複数存在した場合、最初のファイル名が返されますが、全ファイル名を取得したい場合は、下記のようにします。
Sub sample04() Dim str As String Dim val As String str = Dir("C:\SAMPLE\*.txt") val = str Do While str <> "" str = Dir() val = val & vbCrLf & str Loop MsgBox val End Sub
実行結果:sample2.txtは隠しファイルのため、検索結果にありません。
3.注意点
Dirを使用する際に、注意すべき点がいくつかあります。
3-1.引数のattributesに設定する文字列が256文字超
引数のattributesに設定する文字列が256文字超(※バイト数ではなく、文字数)を超えた場合、下記エラーになります。
3-2.拡張子が似たファイルが存在する場合
設定したフォルダ内に、拡張子が「xls」「xlsm」「xlsx」のように似たファイルが存在する場合、下記のように検索対象を指定しても想定とは異なる結果になってしまいます。
Sub sample05() Dim str As String Dim val As String str = Dir("C:\SAMPLE\*.xls") val = str Do While str <> "" str = Dir() val = val & vbCrLf & str Loop MsgBox val End Sub
実行結果:
4.最後に
Dir関数は、ディレクトリ名やファイル名を指定しての存在確認に使用することが多いですが、ファイル属性を指定することでより細かい確認ができるようになります。
ファイル属性を使う頻度は高くないかもしれませんが、頭の片隅に入れておくといざという時に役に立ちます。
コメント