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()で次のファイルを取得することが重要です。これにより、指定したフォルダ内のファイルだけを正しく順次処理できます。


コメント