Excel-VBA プログラミング

【VBA】フォルダ内のファイルを一括で読む方法と読めない場合の原因と対処法

フォルダ内のファイルを一括で読み込む際に出るエラー。「Dir$()」に同一ファイルが表示されて、無限ループしてしまう現象が起こり、ファイルを読み込めない。

悩む女性1

  • 変数に次のファイルが読めない
  • 同じファイル名ばかり入ってくる
  • 一つずつファイルを読み込むはずの「DIR()$」が全く読み込まない

 

という経験はありませんか?

こんな悩みに関して、このDIR()$が読み込まない場合の原因とその対処法について解説していきましょう。

 

Dir$()の読み込みエラー表示

 

それでは、実際にどんなエラーの現象が出てしまうのか見ていきましょう。

<Dir$()の読み込み表示エラーについて>

  • ずっと同じファイル名が表示される
  • 結果同ファイルを読み込むので無限ループになる

 

まずこのDIRの読み込みエラーには、どんな現象が起こるのかというと、同じディレクトリーに格納されているファイルを一括で読み込む処理ですが、新しい次のファイルが変数に入ってこないという現象が起こります。

まずは、こちらの処理をご覧ください。

 

このように、下から3行目のところでDir関数が記述されていますが、ここで変数にファイル名が引き渡されるのですが、Do while文で何度も処理を回しているのにファイルが切り替わらないのです。

ファイルが切り替わらないため、当然無限ループになってしまいます。

これはまずいです。

 

 

DIR$()の変数が切り替わらない原因とは

 

 

このDir$()の変数に値が入ってこない原因について下記の理由が挙げられます。

 

<Dir$()の変数に値が入ってこない原因とは>

  • 読み込みファイル破損
  • プログラミングの記述が古い

 

よくあるのが、読み込むファイルそのものが破損していることがあります。

こうした場合には、ファイル名が先に読み込めないことがありますので、注意が必要です。

またもしかしたらプログラムソースの記述が古いなんてことがあります。これらの場合には、読み込む記述方法を書き換える発想の転換も大切です。

 

読み込まない場合の2つの対処法

 

それでは、フォルダ内のファイルを一括で読み込むことができない場合の対処法について解説していきましょう。

この対処法には、大きく分けて2つに方法が挙げられます。

 

<読み込まない場合の2つの方法>

  • ファイルを置き換える
  • プログラムソースを根本から書き換える

 

ファイルを作り替えましょう

読み込まない場合には、まずはファイルを作り変えてみましょう。一から読み込むファイルを作り替えると動作することがあります。

ファイル自体の破損が起こっている場合にも、プログラムが正常に働かないこともあるので、注意しましょう。

 

FileSystemObjectによるソースの書き換え

それでも大きな変化が得られない場合には、プログラミングの記述を新しくしてみる方法も一つの方法です。

これはどういうことかというと、そのあなたの記述するコーディングが昔の古い形式の処理の場合処理が動かない場合があります。

「FileSystemObjectのVBScript」の処理を活用して記述する方法です。

下記の記述方法にソースを変更して見て下さい。

 

■VBScriptによるフォルダ内のファイルを一括で読み込む処理

 

または、VBScriptでも動作しますので、こちらに変更して試してみてください。

設定環境について

このエラーが起こった設定環境についてお伝えしておきます。

【設定環境】

  • Office:2016
  • OS:Win7

 

 

まとめ

このように、プログラムの記述は、一つの記述方法だけではありません。

アルゴリズムを組み立てれば、色々な記述をすることができますので、色々な記述で動作するプログラムを記述していきましょう。

 


➡【月3万稼げる!ブログの始め方】


→当ブログをフォローして頂けると励みになります。 


楽天おすすめ商品はこちら

  • この記事を書いた人
  • 最新記事

みやさん

【サイト運営者・著者】みやさん 【実績】ライター歴7年 ブログ歴3年⇒2万PV推移中 【実務】現役プログラマー|【発信内容】▶副業やブログの始め方 ▶ライターとしてのノウハウ ▶生活の有益情報を発信しています。皆様の生活改善にご利用ください。

Copyright© 副業ケアネット , 2024 All Rights Reserved Powered by AFFINGER5.