Dir関数

Dir 関数は指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列 (String型) を返します。引数 Attributes にはファイルの属性を表す定数を複数個加算して指定することができます。

スポンサーリンク

Dir関数の使用方法

構文
Dir([PathName] [, Attributes])

【戻り値】 文字列型 (String)
引数名 省略 説明
PathName ファイル名を表す文字列式を指定します。 フォルダ名およびドライブ名も含めて指定できます。 引数 PathName に指定した内容が見つからないときは、長さ 0 の文字列 (” “) を返します。
Attributes 取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。
引数 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

 Do…Loop

テスト用フォルダ『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関数からフォルダ内のファイルやサブフォルダが返ってきます。

  • マクロ実行結果(イミディエイトウィンドウ
    Dir関数戻り値:AAA.xlsx
    Dir関数戻り値:folder1
    Dir関数戻り値:folder2
    Dir関数戻り値:test1.xlsx
    Dir関数戻り値:test2.txt

 
『ファイル・サブフォルダの一覧を取得する』の改良版
ファイルシステムオブジェクトを利用したファイルおよびフォルダ操作

タイトルとURLをコピーしました