フォルダ内のファイルを一括で読み込む際に出るエラー。「Dir$()」に同一ファイルが表示されて、無限ループしてしまう現象が起こり、ファイルを読み込めない。
- 変数に次のファイルが読めない
- 同じファイル名ばかり入ってくる
- 一つずつファイルを読み込むはずの「DIR()$」が全く読み込まない
という経験はありませんか?
こんな悩みに関して、このDIR()$が読み込まない場合の原因とその対処法について解説していきましょう。
Dir$()の読み込みエラー表示
それでは、実際にどんなエラーの現象が出てしまうのか見ていきましょう。
<Dir$()の読み込み表示エラーについて>
- ずっと同じファイル名が表示される
- 結果同ファイルを読み込むので無限ループになる
まずこのDIRの読み込みエラーには、どんな現象が起こるのかというと、同じディレクトリーに格納されているファイルを一括で読み込む処理ですが、新しい次のファイルが変数に入ってこないという現象が起こります。
まずは、こちらの処理をご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 | Sub Test() Dim strbuf As String Dim lngCount As Long Private Const Path As String = "C:\test\" strbuf = Dir(Path & "*.xlsx") Do While strbuf <> "" lngCount = lngCount + 1 Cells(lngCount , 1) = strbuf strbuf = Dir$() ’←ここで、新しいファイルを読み込むが・・・・エラー Loop End Sub |
このように、下から3行目のところでDir関数が記述されていますが、ここで変数にファイル名が引き渡されるのですが、Do while文で何度も処理を回しているのにファイルが切り替わらないのです。
ファイルが切り替わらないため、当然無限ループになってしまいます。
これはまずいです。
DIR$()の変数が切り替わらない原因とは
このDir$()の変数に値が入ってこない原因について下記の理由が挙げられます。
<Dir$()の変数に値が入ってこない原因とは>
- 読み込みファイル破損
- プログラミングの記述が古い
よくあるのが、読み込むファイルそのものが破損していることがあります。
こうした場合には、ファイル名が先に読み込めないことがありますので、注意が必要です。
またもしかしたらプログラムソースの記述が古いなんてことがあります。これらの場合には、読み込む記述方法を書き換える発想の転換も大切です。
読み込まない場合の2つの対処法
それでは、フォルダ内のファイルを一括で読み込むことができない場合の対処法について解説していきましょう。
この対処法には、大きく分けて2つに方法が挙げられます。
<読み込まない場合の2つの方法>
- ファイルを置き換える
- プログラムソースを根本から書き換える
ファイルを作り替えましょう
読み込まない場合には、まずはファイルを作り変えてみましょう。一から読み込むファイルを作り替えると動作することがあります。
ファイル自体の破損が起こっている場合にも、プログラムが正常に働かないこともあるので、注意しましょう。
FileSystemObjectによるソースの書き換え
それでも大きな変化が得られない場合には、プログラミングの記述を新しくしてみる方法も一つの方法です。
これはどういうことかというと、そのあなたの記述するコーディングが昔の古い形式の処理の場合処理が動かない場合があります。
「FileSystemObjectのVBScript」の処理を活用して記述する方法です。
下記の記述方法にソースを変更して見て下さい。
■VBScriptによるフォルダ内のファイルを一括で読み込む処理
1 2 3 4 5 6 7 8 9 10 11 12 13 | Sub Test2() Dim f As Object Dim lngcnt As Long Dim strData(1) as String With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder("C:\test").Files ’←testフォルダ内のファイルを読み込む cnt = cnt + 1 strData(0) = f.Name ’←ファイル名取得 strData(1) = f.DateCreated Next f End With End Sub |
または、VBScriptでも動作しますので、こちらに変更して試してみてください。
設定環境について
このエラーが起こった設定環境についてお伝えしておきます。
【設定環境】
- Office:2016
- OS:Win7
まとめ
このように、プログラムの記述は、一つの記述方法だけではありません。
アルゴリズムを組み立てれば、色々な記述をすることができますので、色々な記述で動作するプログラムを記述していきましょう。