概要

Dir関数は、Excel VBAで指定したパスにあるファイルやフォルダを検索し、その名前を返すための関数です。この関数を使用することで、ファイルの存在確認、フォルダ内のファイル一覧の取得、特定の拡張子のファイルの検索など、ファイル操作に関する様々な処理を簡単に実装できます。

構文

Dir[(パス, [属性])]

パラメータ

  • パス
    検索するファイルやフォルダのパスを文字列で指定します。ワイルドカード(*?)を使用して、複数のファイルを検索することも可能です。

  • 属性(オプション)
    検索するファイルやフォルダの属性を指定します。複数の属性を組み合わせることができます。主な属性は以下の通りです:

    • vbNormal:通常のファイル(デフォルト)

    • vbDirectory:ディレクトリ(フォルダ)

    • vbHidden:隠しファイル

    • vbSystem:システムファイル

    • vbReadOnly:読み取り専用ファイル

戻り値

Dir関数は、指定した条件に一致する最初のファイルまたはフォルダの名前を返します。見つからない場合は空の文字列("")を返します。

説明

Dir関数は、指定されたパスにあるファイルやフォルダの名前を取得し、それを基に様々なファイル操作を行うことができます。初回のDir関数呼び出しでは、検索条件に一致する最初のファイルやフォルダを返し、その後、引数なしで繰り返し呼び出すことで、次のファイルやフォルダを取得します。

  • ファイルの存在確認

    Dir関数は、指定したファイルやフォルダが存在するかを確認するために使用できます。

  • 複数のファイル検索

    ワイルドカードを使用することで、特定のパターンに一致するファイルやフォルダを一度に検索できます。

使用例

基本的な使用例 - ファイルの存在確認

Sub CheckFileExists()
    Dim filePath As String

    filePath = "C:\Temp\sample.txt"

    If Dir(filePath) <> "" Then
        MsgBox "ファイルは存在します。"
    Else
        MsgBox "ファイルは存在しません。"
    End If
End Sub

フォルダ内の特定のファイルを一覧表示する

Sub ListFilesInFolder()
    Dim folderPath As String
    Dim fileName As String

    folderPath = "C:\Temp\"  ' 検索するフォルダのパス
    fileName = Dir(folderPath & "*.txt")  ' .txtファイルを検索

    Do While fileName <> ""
        Debug.Print fileName  ' ファイル名を表示
        fileName = Dir  ' 次のファイルを取得
    Loop
End Sub

フォルダの存在確認と作成

Sub CheckAndCreateFolder()
    Dim folderPath As String

    folderPath = "C:\Temp\NewFolder"

    If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath  ' フォルダが存在しない場合は作成
        MsgBox "フォルダを作成しました。"
    Else
        MsgBox "フォルダは既に存在します。"
    End If
End Sub

特定の拡張子のファイルをすべて削除する

Sub DeleteSpecificFiles()
    Dim folderPath As String
    Dim fileName As String

    folderPath = "C:\Temp\"
    fileName = Dir(folderPath & "*.tmp")  ' .tmpファイルを検索
    
    Do While fileName <> ""
        Kill folderPath & fileName  ' ファイルを削除
        fileName = Dir  ' 次のファイルを取得
    Loop
    MsgBox "すべての.tmpファイルを削除しました。"
End Sub

応用例

サブフォルダを含めたファイル検索

指定したフォルダとそのサブフォルダ内のファイルを再帰的に検索する例です。

Sub ListFilesInSubFolders()
    Dim folderPath As String

    folderPath = "C:\Temp\"
    SearchFiles folderPath
End Sub


Sub SearchFiles(ByVal folderPath As String)
    Dim fileName As String
    Dim subFolder As String
    
    ' ファイルを検索
    fileName = Dir(folderPath & "*.*")
    Do While fileName <> ""
        Debug.Print folderPath & fileName  ' ファイルパスを表示
        fileName = Dir
    Loop

    ' サブフォルダを検索
    subFolder = Dir(folderPath & "*", vbDirectory)
    Do While subFolder <> ""
        If subFolder <> "." And subFolder <> ".." Then
            If (GetAttr(folderPath & subFolder) And vbDirectory) = vbDirectory Then
                SearchFiles folderPath & subFolder & "\"
            End If
        End If
        subFolder = Dir
    Loop
End Sub

隠しファイルの一覧を取得する

隠し属性を持つファイルのみを取得する例です。

Sub ListHiddenFiles()
    Dim folderPath As String
    Dim fileName As String

    folderPath = "C:\Temp\"
    fileName = Dir(folderPath & "*.*", vbHidden)  ' 隠しファイルを検索

    Do While fileName <> ""
        Debug.Print fileName  ' ファイル名を表示
        fileName = Dir  ' 次のファイルを取得
    Loop
End Sub

備考

  • Dir関数は、検索条件に一致するファイルがなくなると空の文字列を返します。繰り返し呼び出す際はDir関数が終了条件として使われます。

  • 属性の指定がない場合、通常のファイルのみが対象となります。特定の属性を持つファイルを検索する際は、適切な属性を指定してください。

  • Dir関数は、ファイルの検索が行われるたびに結果が更新されるため、途中で他のファイル操作を行うと、意図しない動作をすることがあります。

  • ワイルドカードを使用することで、複数のファイルを簡単に検索できますが、ディレクトリ操作には十分注意が必要です。