概要
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
関数は、ファイルの検索が行われるたびに結果が更新されるため、途中で他のファイル操作を行うと、意図しない動作をすることがあります。 -
ワイルドカードを使用することで、複数のファイルを簡単に検索できますが、ディレクトリ操作には十分注意が必要です。