【ExcelVBA・マクロ】Dir関数の使い方|ファイルやフォルダの存在確認・一覧取得【コピペOK】

Dir関数の使い方 ExcelVBA

VBAでファイル操作をしていると、次のようなことはありませんか?

  • ファイルが存在するか確認したい
  • フォルダ内のファイル一覧を取得したい
  • 特定のファイルだけを処理したい

このような場合は、Dir関数を使うことで解決できます。
ファイルやフォルダの存在確認・一覧取得ができる、VBAで非常に重要な関数です。

この記事では、Dir関数の基本から実務で使える応用までを初心者向けに分かりやすく解説します。


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

この記事でできること

  • ファイルの存在確認ができる
  • フォルダ内のファイル一覧を取得できる
  • 特定条件のファイルを抽出できる

基本:Dir関数の使い方

基本構文はこちらです。

Dir(パス)

例:

MsgBox Dir("C:\test\sample.xlsx")

→ ファイルが存在すれば「sample.xlsx」が返ります。


ファイルの存在確認

最もよく使うパターンです。

Option Explicit

Sub CheckFileExists()

    Dim filePath As String

    filePath = "C:\test\sample.xlsx"

    If Dir(filePath) <> "" Then
        MsgBox "ファイルは存在します"
    Else
        MsgBox "ファイルは存在しません"
    End If

End Sub

フォルダの存在確認

If Dir("C:\test", vbDirectory) <> "" Then
    MsgBox "フォルダは存在します"
End If

ファイル一覧を取得する方法

Dir関数は繰り返し呼び出すことで一覧を取得できます。

Option Explicit

Sub GetFileList()

    Dim fileName As String

    fileName = Dir("C:\test\*.*")

    Do While fileName <> ""
        Debug.Print fileName
        fileName = Dir
    Loop

End Sub

これでフォルダ内の全ファイル名が取得できます。


特定の拡張子だけ取得する

fileName = Dir("C:\test\*.xlsx")

→ Excelファイルだけ取得できます。


特定の文字を含むファイルを取得

fileName = Dir("C:\test\売上*.xlsx")

→ 「売上」で始まるファイルを取得


サブフォルダも含めて処理する考え方

Dir単体では再帰処理が必要になります。
応用として別記事にするとSEO的に強いです。


ファイルを1件ずつ処理する例

Option Explicit

Sub ProcessFiles()

    Dim fileName As String

    fileName = Dir("C:\test\*.xlsx")

    Do While fileName <> ""

        MsgBox "処理中:" & fileName

        fileName = Dir
    Loop

End Sub

実務での活用例

  • ファイル存在チェック
  • フォルダ内の一括処理
  • CSVやExcelの一括読み込み
  • バックアップ処理

ファイル操作系の基本となる関数です。


注意点(重要)

① 2回目以降は引数なし

一覧取得時は2回目以降は引数なしで呼び出します。

fileName = Dir

② 同時に複数使えない

Dirは1つの処理中にしか使えません。

③ フルパスに注意

相対パスではなくフルパスが安全です。


よくあるエラーと対処法

① ファイルが見つからない

パスが間違っている可能性があります。

② 途中で止まる

Dirの使い方(引数なし呼び出し)を確認してください。

③ コードは正しいのにエラーになる

コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。


まとめ

  • Dirでファイル・フォルダを取得
  • 存在確認は空文字チェック
  • ループで一覧取得可能
  • 実務ではファイル処理で必須

Dir関数を使いこなせるようになると、ファイル操作の自動化が一気に進みます。
VBAの実務では非常に重要な関数なので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました