VBA Dir関数で指定フォルダのPDFのみを正しく取得する方法

Visual Basic

VBAでDir関数を使って特定フォルダ内のPDFファイルを順次処理する場合、意図しない上位フォルダのファイルが返ってくることがあります。この記事では、Dir関数の正しい使い方とよくあるミスの修正方法を解説します。

Dir関数の基本と注意点

Dir関数は、指定したパスとワイルドカードに一致する最初のファイル名を返します。その後、Dir()を引数なしで呼ぶことで次の一致するファイルを取得できます。

重要な点は、Dir()の呼び出しをループ内で再度パス付きで呼ぶと、最初から検索がやり直され、予期せぬ結果が返ることです。

正しいPDFファイル取得のループ例

DATAフォルダ内のPDFを順次処理する場合、以下のように記述します。

pdfFile = Dir(pdfFolder & “*.pdf”)
Do While pdfFile <> “”
   ‘ ファイル処理コード
   pdfFile = Dir() ‘ ← 引数なしで次のファイルを取得
Loop

ここで注意すべきは、ループ内でDir(pdfFolder & “*.pdf”)のようにパスを指定して再度呼ばないことです。これにより、検索が再開され、上位フォルダのファイルが返ってしまう原因となります。

サンプルコードの整理

以下は安全なサンプルコードです。

Dim pdfFile As String
Dim pdfFolder As String
pdfFolder = ThisWorkbook.Path & “\出力\DATA\”
pdfFile = Dir(pdfFolder & “*.pdf”)
Do While pdfFile <> “”
   ‘ ファイル処理
   Debug.Print pdfFile
   pdfFile = Dir() ‘ 引数なしで次のファイル
Loop

まとめ

VBAでDir関数を使う際は、最初の呼び出しのみパスとワイルドカードを指定し、ループ内では引数なしのDir()で次のファイルを取得することが重要です。これにより、指定したフォルダ内のファイルだけを正しく順次処理できます。

コメント

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