【AccessVBA/ExcelVBA】Dir関数の便利な実用例

MicrosoftのOfficeには、フォルダ操作やファイル操作を行うためにFileSystemObjectという便利なオブジェクトが用意されていますが、ファイルの存在チェックや条件に合うファイル名の取得などはDir関数でシンプルに実現できてしまいますので、今回はDir関数の実用例をいくつか紹介したいと思います。

  1. Dir関数の構文
  2. ファイルの存在チェック
  3. 条件に合うファイル名の取得(Loop処理)

それでは見ていきましょう。

1.Dir関数の構文

Dir関数の構文は以下の通りです。

Dir(検索対象Path, 属性)

検索対象Path省略可能です。ディレクトリかフォルダー、およびドライブを指定できます。Windows環境では*(半角アスタリスク)をワイルドカードとして使ったり、?(半角クエスチョン)を任意の一文字として指定することができます。
属性検索対象の属性を指定します。省略するとvbNormal(=0、属性を持たないもの)が選択されたことになります。設定できる値はVBAライブラリのVbFileAttributeというenumに定義されています。内容はVBEでF2キーを押すことで参照できます。

2.ファイルの存在チェック

Dir関数は実行した結果対象のファイル(もしくはフォルダ)が見つかれば、そのファイル名(もしくはフォルダ名)を返してくれますが、見つからなかった場合は長さ0の文字列を返します。それを利用して、ファイルを読み込んだり書き出したりする前のファイルの存在チェックに利用することができます。

デスクトップにあるtest.csvが存在するかどうかチェックするには、以下のように書きます。

If Dir("c:\users\akiyanohito\desktop\test.csv") <> "" Then
    'ファイルが見つかった場合の処理
End If

フォルダの存在チェックを行う場合には第二引数を使って以下のように書きます。

If Dir("c:\users\akiyanohito\desktop\test", vbDirectory) <> "" Then
    'testというフォルダが見つかった場合の処理
End If

3.条件に合うファイル名の取得

フォルダ内に存在するある条件を満たしたファイルすべてを取得して処理したい場合などにDir関数を利用できます。

例えば、ファイルの先頭が「売上ファイル_」で始まり、そのあとにYYYYMMDDの8桁の日付が続き、最後に「.csv」と拡張子で終わるファイル名すべてを処理したい、といった場合のサンプルコードです。

Public Function FileProcessSample() As Long
    Dim strPath As String
    Dim strFile As String
    strPath = "c:\users\akiyanohito\desktop\test\売上ファイル_"
    strFile = Dir(strPath & "????????.csv")
    Do While strFile <> ""

        '見つかったファイルに対する処理を書く

        strFile = Dir '引数を指定せずに実行すると条件に合う次のファイルを返す
    Loop
End Function

オブジェクト変数の定義やオブジェクトの開放などを伴わずシンプルに書けるので、便利ですね。