教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA 関数】Dir関数の使い方を教えて!

構文

構文は以下の通りです。

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

解説

Dir関数は、検索結果として文字列(ファイル名)を返します。最初の呼び出しでは、検索結果の最初のファイル名を返し、2回目以降の呼び出しでは、次のファイル名を返します。ファイルがなくなった場合は、空の文字列を返します。

引数 指定 内容
パス 省略可 ファイルを検索するディレクトリのパスを指定します。省略可能であり、省略した場合は現在のディレクトリが対象になります。
属性 省略可 ファイルの属性を指定します。省略可能であり、省略した場合は通常のファイルが対象になります。設定値を以下で紹介します。

属性には以下の設定値が指定できます。

定数 内容
vbNormal 0 属性のないファイルです。省略した場合は、自動的にこの設定になります。
vbReadOnly 1 属性のないファイルと読み取り専用のファイルです。
vbHidden 2 属性のないファイルと隠しファイルです。
vbSystem 4 属性のないファイルとシステム ファイルです。
vbVolume 8 ボリューム ラベルです。他の属性を指定した場合は、vbVolumeは無視となります。
vbDirectory 16 属性のないファイルとディレクトリまたはフォルダです。
vbAlias 64 指定されたファイル名はエイリアスです。

使い方

次の例では、指定したディレクトリ内のすべてのファイル名を表示します。

Sub ShowFilesInDirectory()
    Dim filePath As String
    filePath = "C:\path\to\directory\" ' 検索するディレクトリのパスを指定
    Dim fileName As String
    fileName = Dir(filePath) ' 最初のファイル名を取得
    Do While fileName <> "" ' ファイル名が空の場合はループ終了
        MsgBox fileName ' ファイル名を表示
        fileName = Dir ' 次のファイル名を取得
    Loop
End Sub

上記の例では、filePath変数に検索するディレクトリのパスを指定し、fileName変数に最初のファイル名を取得します。その後、Do Whileループを使用して、ファイル名が空の場合(すべてのファイルを取得した場合)まで、ファイル名を表示します。最後に、Dir関数を再度呼び出して次のファイル名を取得します。

また、Dir関数にはattributesパラメータを指定することもできます。例えば、次のようにattributesパラメータにvbDirectoryを指定することで、ディレクトリ(フォルダ)のみを取得することができます。以下にその例を示します。

Sub ShowDirectoriesInDirectory()
    Dim directoryPath As String
    directoryPath = "C:\path\to\directory\" ' 検索するディレクトリのパスを指定
    Dim directoryName As String
    directoryName = Dir(directoryPath, vbDirectory) ' 最初のディレクトリ名を取得
    Do While directoryName <> "" ' ディレクトリ名が空の場合はループ終了
        If (GetAttr(directoryPath & directoryName) And vbDirectory) = vbDirectory Then ' ディレクトリかどうかを判定
            MsgBox directoryName ' ディレクトリ名を表示
        End If
        directoryName = Dir ' 次のディレクトリ名を取得
    Loop
End Sub

上記の例では、directoryPath変数に検索するディレクトリのパスを指定し、directoryName変数に最初のディレクトリ名を取得します。その後、Do Whileループを使用して、ディレクトリ名が空の場合(すべてのディレクトリを取得した場合)まで、ディレクトリ名を表示します。ディレクトリかどうかを判定するために、GetAttr関数を使用してvbDirectoryとのビット演算を行います。

プログラミング例

1.ファイルの数を取得する例

指定したディレクトリ内のファイルの数を取得する例です。

Sub CountFilesInDirectory()
    Dim filePath As String
    Dim fileName As String
    Dim fileCount As Integer
    filePath = "C:\path\to\directory\" ' 検索するディレクトリのパスを指定
    fileName = Dir(filePath) ' 最初のファイル名を取得
    fileCount = 0
    Do While fileName <> "" ' ファイル名が空の場合はループ終了
        fileCount = fileCount + 1 ' ファイルの数をカウント
        fileName = Dir ' 次のファイル名を取得
    Loop
    MsgBox "ファイルの数: " & fileCount
End Sub

2.特定の拡張子を持つファイルを検索する例

指定したディレクトリ内で、特定の拡張子を持つファイル名を表示する例です。

Sub FindFilesByExtension()
    Dim filePath As String
    Dim fileName As String
    filePath = "C:\path\to\directory\" ' 検索するディレクトリのパスを指定
    fileName = Dir(filePath, "*.xlsx") ' 最初の.xlsxファイル名を取得
    Do While fileName <> "" ' ファイル名が空の場合はループ終了
        MsgBox fileName ' ファイル名を表示
        fileName = Dir ' 次のファイル名を取得
    Loop
End Sub

上記の例では、`filePath`変数に検索するディレクトリのパスを指定し、`fileName`変数に最初の`.xlsx`ファイル名を取得します。その後、`Do While`ループを使用して、ファイル名が空の場合(すべてのファイルを取得した場合)まで、ファイル名を表示します。`.xlsx`のような特定の拡張子を指定するために、`Dir`関数の第2引数に`"*.xlsx"`というパターンを指定します。

まとめ

Dir関数は、指定したディレクトリ内のファイル名やディレクトリ名を取得するために利用されます。是非活用してください。