サイトについて      連絡先   検索

VBA Dir 関数

はじめに

Excel VBA の Dir 関数を紹介します。

Dir 関数は、指定したパターンに一致するファイルやフォルダを返します。

ファイルの存在確認などに使用します。

構文

Dir

Dir(パターン, 属性)

名前 説明
引数「パターン」省略できます。ファイルやフォルダのパスを指定します。
ワイルドカードを指定できます。
引数「属性」省略できます。取得するファイルの属性を組み合わせて指定します。
戻り値文字列型 (String)

引数「属性」

名前 属性
vbNormal (既定)0標準ファイル
vbReadOnly1読み取り専用ファイル
vbHidden2隠しファイル
vbSystem4システム ファイル
vbVolume8ボリューム ラベル。この値を指定すると、すべての属性は無効になります。
vbDirectory16フォルダ

解説

パターンに一致するファイルが見つかったときは、そのファイル名を拡張子を付けて返します。

パターンに使用できるワイルドカードには次のものがあります。

ワイルドカード * を使用して複数のファイルが一致するときは、最初のファイル名を返します。 2 つめ以降のファイル名を取得したいときは、引数を指定しないで Dir 関数を呼び出します。

パターンにフォルダのパスを指定すると、その直下のファイル一覧を取得できます。

属性を省略すると標準ファイルが条件になります。

属性に「vbReadOnly + vbHidden」を指定すると標準ファイル、読み取り専用ファイル、隠しファイルのいづれかのファイルが条件になります。読み取り専用ファイルだけ返したいということはできません。

GetAttr 関数を使用して、そのファイルが読み取り専用か調べることができます。

ファイルが見つからないときは空文字 "" を返します。

使用例

Dim s As String
s = Dir("C:\test.txt")
Debug.Print (s) ' "test.txt" ' (存在するとき)

s = Dir("C:\test.txt", vbReadOnly)
Debug.Print (s) ' "test.txt" ' (test.txt が標準ファイルまたは読み取り専用のとき)

s = Dir("C:\test.txt", vbReadOnly + vbHidden)
Debug.Print (s) ' "test.txt" ' (test.txt が標準ファイルまたは読み取り専用または隠しファイルのとき)

' 読み取り専用ファイルかチェック
Dim b As Boolean
s = Dir("C:\test.txt", vbReadOnly)
b = (GetAttr(s) And vbReadOnly) <> 0
Debug.Print(b) ' True: 読み取り専用、False: その他

s = Dir("C:\test.txt")
Debug.Print (s) ' "" ' (存在しない)

s = Dir("C:\t*.txt")
Debug.Print (s) ' "test.txt" ' (t から始まるファイルで拡張子が .txt のファイル)

s = Dir("C:\t?.txt")
Debug.Print (s) ' "to.txt" ' (t のみまたは t で始まる二文字のファイルで拡張子が .txt のファイル)

' C ドライブ直下のファイル一覧を出力
s = Dir("C:\")
Do While s <> ""
    Debug.Print (s)
    s = Dir ' 次のファイル名を取得
Loop

' C ドライブ直下のフォルダ一覧を出力
s = Dir("C:\", vbDirectory)
Do While s <> ""
    Debug.Print (s)
    s = Dir ' 次のフォルダ名を取得
Loop

関連ページ