はじめに
Excel VBA マクロの Dir 関数について紹介していきます。
Dir 関数は、指定した引数と一致したファイル名やフォルダ名を返し、一致しない場合は空欄(“ ”)を返します。
この特性を利用して、ファイルやフォルダの存在確認を確認したい時などに使用します。
構文
Dir([PathName] [, Attributes] )
戻り値:文字列型(String)
[PnathName]にファイルまたはフォルダパスを指定し、一致した(存在する)場合は、ファイル名を文字列型(String)で返します。
一致しなかった(存在しない)場合は、空欄(””)を返します。
引数
引数名 | 省略 | 内容 |
PathName | 〇 |
ファイルやフォルダのパスを指定します。 ワイルドカードの使用が可能です。 |
Attributes | 〇 |
取得するファイルが持つ属性を指定します。 省略した場合は標準ファイルの属性になります。 |
属性[, Attributes]
定数名 | 値 | 内容 |
vbNormal | 0 |
標準ファイル Attributesを省略した場合、指定される。 |
vbReadOnly | 1 |
読み取り専用ファイル |
vbHidden | 2 |
隠しファイル |
vbSystem | 4 |
システムファイル |
vbVolume | 8 |
ボリューム ラベル |
vbDirectory | 16 |
フォルダ |
解説
[PathName]について
引数[PathName]に指定したパスと一致したファイル・フォルダを検索し、一致した場合ファイル名・フォルダ名を文字列型(String)で返します。
引数[PathName]に一致しなかった場合は、空欄(””)を返します。
引数「パターン」にはワイルドカード(*、?)が使用できます。
ワイルドカードを使用して複数のファイル名と一致する場合、最初にヒットしたファイル名を返します。
・一致しなかった場合は空欄(“”)を返す。
・ワイルドカードの指定ができる。
[Attributes]について
引数[Attributes]を省略すると[vbNormal(標準ファイル)]が設定されます。
フォルダを検索する場合は、引数[Attributes]に定数[vbDirectory]を指定する必要があります。
+演算子を用いて、[Attributes]を組み合わせることが出来ます。
vbReadOnly + vbHiddenなら「標準ファイル」または「読み取り専用ファイル」または「隠しファイル」が条件になります。
vbReadOnlyは、「読み取り専用ファイル」だけ返したいということはでず、「標準ファイル」が含まれます。
そのため、vbReadOnlyを指定した場合の処理は、[標準ファイル」または「読み取り専用ファイル」となります。
・フォルダを検索する場合は、[vbDirectory]を指定すること。
・[Attributes]の組み合わせは+演算子を用いる。
・vbReadOnlyを指定した場合の処理は、
[標準ファイル」または「読み取り専用ファイル」となる。
使用例
ファイル確認の存在確認と名前の取得
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub sample_file() Dim file_name As String file_name = Dir("C:\VBA\sample_1.xlsx", vbNormal) '[Attributes]にvbNormalを指定し、ファイル名を検索 If file_name = "" Then Debug.Print "ファイルはありません。" Else Debug.Print file_name End If End Sub |
1 |
sample_1.xlsx |
フォルダ確認の存在確認と名前の取得
CドライブのVBAフォルダに保存されているfolder_1フォルダの存在を確認しイミディエイトウィンドウに結果を表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub sample_folder() Dim folder_name As String folder_name = Dir("C:\VBA\folder_1", vbDirectory) '[Attributes]にvbDirectoryを指定し、フォルダ名を検索 If folder_name = "" Then Debug.Print "フォルダはありません。" Else Debug.Print folder_name End If End Sub |
1 |
folder_1 |
フォルダに保存されているすべてのファイル名の存在確認と名前の取得
CドライブのVBAフォルダに保存されているすべてのファイルの存在を確認しイミディエイトウィンドウに結果を表示する。
1 2 3 4 5 6 7 8 9 10 11 |
Sub sample_file_list() Dim file_name, list As String file_name = Dir("C:\VBA\", vbNormal) 'ファイル名を指定しないことでフォルダにある任意のファイルを検索 Do While file_name <> "" '空欄("")を返すまでループ Debug.Print file_name '初めにヒットしたファイル名を返す。 file_name = Dir() '引数を指定しないことで上記で指定したフォルダに含まれる次のファイル名を取得する。 Loop End Sub |
1 2 |
sample_1.xlsx sample_2.xlsx |
フォルダに保存されているすべてのフォルダ名の存在確認と名前の取得
CドライブのVBAフォルダに保存されているすべてのフォルダの存在を確認しイミディエイトウィンドウに結果を表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub sample_folder_list() Dim folder_name, list As String folder_name = Dir("C:\VBA\*.", vbDirectory) 'ファイル名を指定しないことでフォルダにある任意のファイルを検索する。また、「*.」を入れないとファイルも検出される。 Do While folder_name <> "" '空欄("")を返すまでループ If folder_name <> "." And folder_name <> ".." Then'このままだと「.」,「..」も検出されるのでIF文で除外しておく。 Debug.Print folder_name '初めにヒットしたファイル名を返す。 End If folder_name = Dir() '引数を指定しないことで上記で指定したフォルダに含まれる次のファイル名を取得しにいく。 Loop End Sub |
1 2 |
folder_1 folder_2 |
以上、Dir関数の説明になります。
コメント