はじめに
Dir関数は少々癖のある関数です。初心者の方にとっては戸惑う事もあると思います。
ここでは基本的な使い方を解説します。
Dir関数の使い道は、フォルダ内のファイル一覧を取得することと、ファイルの存在を調べることです。2つの使い方を見ていきましょう。
フォルダ内のファイル一覧
Dir関数は、フォルダ内のファイル一覧を取得したい時によく使われます。
以下が基本的な使い方です。
'Dir関数を使ってフォルダ内のファイル一覧
Sub searchFileForDir()
Dim fname As String
Dim myPath As String
myPath = "C:\tools" 'フォルダを指定
fname = Dir(myPath & "\*.*") '【1回目のDir】ファイルの種類を指定 --- ①
Do While fname <> "" '--- ②
Debug.Print fname 'ファイル名のみ ---- ③
fname = Dir() ’【2回目以降のDir】 ---- ④
Loop
End Sub
プログラム解説
Dir関数は1回目にワイルドカードを含んだパス(フルパス)を引数に指定すると、最初に見つかったファイル名(ファイル名.拡張子)を返してくれます。
2回目以降は、引数なしで呼び出してファイル名を取得します。
もし該当するファイルがない場合は、長さ 0 の文字列 (“”) を返します。
1回目:
Dir(”C:\tools*.*”) –> “C:\tools\sample1.txt”
2回目:
Dir() –> “C:\tools\sample2.txt”
3回目:
Dir() –> “C:\tools\testBook.xlsx”
4回目:
Dir() –> “”
最初に引数なしでDir() として呼び出した時は、エラーとなります。
また、毎回 Dir(”C:\tools*.*”) で呼び出してしまうと、最初のファイル名のみが繰り返し出力されてしまいます。
Dir()で空白を返したにも関わらず、再度Dir()を使うとエラーとなります。
上記のサンプルプログラムでは、①1回目のDir関数で引数にワイルドカード付きのパスを渡しています。
②ではDo While Loop で繰り返し処理を行い、fnameが空文字列の時に抜けます。
③でファイル名の表示を行います。
④で2回目以降、引数なしの Dir() を実行します。Dir() で返された文字列 (fname) が空文字の場合は、②で繰り返し処理を抜けます。
fnameにファイル名があれば、③で表示し、次の Dir() を実行します。
このプログラムでは、fname = Dir関数 という風に文字列変数に代入してから使っています。
文字列変数で受けずに、 Do While Dir() としたり、Debug.Print Dir() などとすると思った通りの結果は得られません。
実際のプログラムでは、③の部分に色々な処理が入ると思いますが、①~④のステップを崩さずに形で覚えて使うようにすればミスは少なくなると思います。
ファイルが存在するか調べる
Dir関数の引数にワイルドカードを使わずフルパスを渡す事で、そのファイルが存在するかを調べる事ができます。
Sub dirTest2()
If Dir("C:\tools\testBook.xlsx") <> "" Then
Debug.Print "存在します。"
Else
Debug.Print "ありません。"
End If
End Sub
このプログラムでは、Dir関数にフルパスを引数に渡しています。もしそのファイルが存在する場合は、「ファイル名.拡張子」を返し、存在しない場合は、長さ 0 の文字列 (“”) を返します。
Dir(“C:\tools\testBook.xlsx“) —> 存在する場合は、“testBook.xlsx“を返す。
まとめ
Dir関数を使用する目的は主に、フォルダ内のファイル一覧、ファイルの存在確認になります。
ファイル一覧では、2回目以降に引数なしで Dir()を使うというのが癖のある関数ではありますが、割と簡単に書けるのでよく使われます。
是非使い方をマスターしましょう。特にファイル一覧を取得したい場合は、サンプルで示した①~④までの工程を形で覚えて使うようにすれば間違いは少なくなると思います。基本の形を崩さずに使う事がミスを防ぐコツです。
Dir関数は更にファイル属性なども引数に指定できますが、ここでは省略したいと思います。