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

VBA Dir 関数

はじめに

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

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

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

  • 目次
    • 構文
    • 解説
    • 使用例

構文

Dir(パターン, 属性)
パターン属性が一致するファイルやフォルダのパスを取得します。

Dir()
複数のファイルやフォルダが一致するときに次のパスを取得します。

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

引数「属性」

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

解説

パターンについて

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

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

パターン 説明 使用例 一致例
*任意の長さの文字 (0 文字以上)あ*あ, あい, あいう
?任意の1文字 または 0 文字あ?あい, あか, あき

ワイルドカードを使用して複数のファイルが一致するときは、最初のファイル名を返します。

フォルダのパスを指定するにはD:\Tips\のように、最後に \ マークを付けます。その直下の最初のファイル名を返します。

ワイルドカードやフォルダのパスを指定した後に、引数をすべて省略して Dir 関数を呼び出すたびに、その次のファイル名を取得できます。取得する順番に決まりはありませんが、昇順になっています。

属性について

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

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

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

その他

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

引数を省略してファイルの一覧をすべて取得した後は、空文字""を返します。

パターンに空文字"""."などの文字を指定すると、エクセルの「既定のローカルファイルの保存場所」のパスを指定したことになります。これは意図した結果ではないため使用しない方がいいです。

パターンに空白" "を指定すると「エラー 53 ファイルが見つかりません。」になります。

使用例

ファイルの存在確認。


Dim s As String

s = Dir("D:\test.txt")
Debug.Print (s) ' test.txt (存在するとき)
  
s = Dir("D:\test")
Debug.Print (s) ' "" (存在しない)

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

フォルダの存在確認。


Dim s As String
s = Dir("D:\Tips", vbDirectory)
Debug.Print (s) ' Tips (存在するとき)

s = Dir("D:\Tips", vbDirectory)
Debug.Print (s) ' "" (存在しない)

指定した属性のファイルを取得。


Dim s As String

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

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

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

ファイルの一覧を取得。


Dim s As String

' t から始まるファイルで拡張子が .txt のファイル
s = Dir("D:\t*.txt")
Do While s <> ""
    Debug.Print (s)
    s = Dir ' 次のファイル名を取得
Loop

' t のみまたは t で始まる二文字のファイルで拡張子が .txt のファイル
s = Dir("D:\t?.txt")
Do While s <> ""
    Debug.Print (s)
    s = Dir ' 次のファイル名を取得
Loop

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

' D ドライブ直下のフォルダ一覧を出力
s = Dir("D:\", vbDirectory)
Do While s <> ""
    Debug.Print (s)
    s = Dir ' 次のフォルダ名を取得
Loop
  • 目次
    • 構文
    • 解説
    • 使用例