本ページには広告が含まれています。

ExcelVBA Dir 関数 ファイルやフォルダの名前を返す

ExcelVBA Dir 関数 ファイルやフォルダの名前を返す

Excel VBAの「Dir 関数」について解説します。

スポンサーリンク

Dir 関数とは

Excel VBA の Dir 関数は、指定したパターンに一致するファイルやフォルダの名前を返します。ファイルやフォルダの存在を確認したり、それらを検索して一覧を取得したりするために使う関数です。

Dir 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

Dir 関数(Visual Basic for Applications リファレンス)

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

Dir[(pathname[, attributes])]

引数

引数 説明
pathname【省略可能】ファイル名やフォルダ名を表す文字列式を指定します
※ ファイルやフォルダのパスを省略した場合は、
  カレントフォルダのパス指定となります
※ 指定にワイルドカード (*) や (?) を使用できます
attributes【省略可能】ファイル属性を定数または値で指定します
※ 組み合わせて複数の属性を指定できます(下表参照)

最初の呼び出しの際は pathname を省略できません。指定しないとエラーが発生します。
attributes ファイル属性も指定する場合は、pathname を指定する必要があります。
attributes に指定できるファイル属性の一覧は次のとおりです。組み合わせて指定できます。

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

【注意】規定値の「標準ファイル」は必ず指定されることに注意する必要があります!
例えば、vbDirectory を指定した場合、vbNormal も自動的に指定されているので、フォルダと同時に標準のファイル名も抽出されることになります。

戻り値

戻り値説明
文字列
(String)
指定条件に一致する最初のファイルやフォルダの名前を返します

※ 続けて次のファイルを取得したい場合、Dir 関数に引数を与えずに実行します。
pathname が見つからない場合は、長さが 0 の文字列 (“”) が返ります。
Dir 関数を再帰呼び出しすることはできません。

解説(使用例)

Dir 関数の基本的な使い方をサンプルで確認していきましょう。

Dir 関数サンプル (基本的な使用例)

指定したファイルやフォルダを検索する例を紹介します。

単一のファイルを検索する例

指定したファイルが存在しているかどうか確認する例です。

'■Dir関数使用例1(単一ファイル検索例)
Sub Dir_Sample01()
    Dim fName As String

    ' 特定のファイルを検索
    fName = Dir("C:\VBA_test\Sample_02.xls")
    
    ' 結果で処理を分岐
    If fName <> "" Then
        MsgBox "ファイル【" & fName & "】が見つかりました!"
    Else
        MsgBox "ファイルは見つかりませんでした。"
    End If
End Sub

指定ファイルが見つかって表示された MsgBox 画像です。

Dir_Sample01 実行で表示された MsgBox画像

このサンプルでは MsgBox を表示していますが、実務で使うVBAではここになんらかの処理(例えば、ファイルを実行するなど)を記述することになるでしょう。

特定パターンの複数ファイルを検索する例

指定した特定パターンのファイルを検索して該当するファイルをすべてリスト化して表示する例です。

'■Dir関数使用例2(複数ファイルの検索例)
Sub Dir_Sample02()
    Dim fName As String
    Dim fList As String       'ファイルリスト用

    ' 特定パターン「*.xls」のファイルを検索
    fName = Dir("C:\VBA_test\*.xls")

    ' 検索結果を表示
    If fName <> "" Then
        fList = "見つかったファイル一覧:"
        Do While fName <> ""
            fList = fList & vbCrLf & fName
            fName = Dir()   ' 次のファイルを検索
        Loop
        MsgBox fList        ' 見つかったファイル一覧を表示
    Else
        MsgBox "ファイルは見つかりませんでした。"
    End If
End Sub

指定パターンの見つかったファイル一覧を表示して MsgBox 画像です。

Dir_Sample02 実行で表示された MsgBox画像

・7行目で、最初の Dir 関数を特定のファイルパターン「*.xls」を指定して検索を実行しています。最初の Dir 関数では、複数のファイルがある場合ひとつ目のファイル名だけ取得して返します。

・12行目、Do While … Loop を使ってすべてのファイルに対して処理を行います。

・14行目、次のファイルを取得するために、引数なしで Dir 関数を再度実行します。

フォルダを検索する例

次にフォルダを取得する例です。attributes に 定数 vbDirectory または 値16を指定して検索します。

'■Dir関数使用例3(フォルダの検索例)
Sub Dir_Sample03()
    Dim fName As String, path As String
    Dim fList As String
    
    ' 検索するパスを指定
    path = "C:\VBA_test\"
    ' パス直下のフォルダを検索
    fName = Dir(path, vbDirectory)
    
    ' 検索結果を表示
    If fName <> "" Then
        fList = "見つかったフォルダ一覧:"
        Do While fName <> ""
            ' "." と ".." は除外する
            If fName <> "." And fName <> ".." Then
                ' フォルダかどうかを「GetAttr関数」で確認
                If GetAttr(path & fName) = vbDirectory Then
                    fList = fList & vbCrLf & fName
                End If
            End If
            fName = Dir()     ' 次のフォルダを取得
        Loop
        MsgBox fList     ' 見つかったフォルダ一覧を表示
    Else
        MsgBox "フォルダは見つかりませんでした。"
    End If
End Sub

実行結果の MsgBox 画像です。3つのサブフォルダが存在していました。

Dir_Sample03 実行で表示された MsgBox画像

・18行目で、GetAttr 関数を使ってフォルダだけ取得するようにしています。GetAttr 関数を使わなかった場合は、次の画像のようにフォルダ名だけでなくファイル名も一緒に抽出されることになります。

Dir_Sample01 フォルダチェックしない場合の MsgBox画像

おわりに

Excel VBA の Dir 関数は、ファイルやフォルダの検索を行うための関数です。指定した条件に一致するファイルまたはフォルダの名前を含む文字列を返します。この関数を効果的に使用することで、ファイル管理やディレクトリ操作を簡単に行うことができます。

検索の際に注意する点として、引数 attributes は標準ファイルが規定値 (0) なので、他の定数(例えば vbDirectory (16) を指定した場合、標準ファイル+フォルダの両方が指定されている点です。必要に応じて3番目のサンプルのように、GetAttr 関数を使って絞り込む必要があります。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!