|
▼すいまーひろ さん:こんにちは〜
>フォルダにテキストファイルがあり、それを読み込んで、先頭データが検索条件に一致したものだけをシートにリストアップします。
>今まではFileSearchを使用していましたが、2010では使えないので、
>上記で動かすと、フォルダ内のファイルが少ないとうまく行くのですが、多いといつまで待っても動きません。
>2003-FileSearchでやっていたときは、古い、とろくさいパソコンでも3分ほどで処理できてたのですが・・・。
アドバイスでなくて確認なんですが、
ファイルの検索を FileSearchから Fsoに代えたら、少なくとも3分で終わってた処理が
「いつまで待っても」終わらないことがあるようになった、ということですか?
プログラムの後半(Line Input# でOpenして2行読む部分)は
考え方として 変更なしですか?
後半の処理に大きな変更がないなら、前半の FileSearch の方法を変えたことが
処理が遅くなっている原因、という結論におのずと導かれるのですが、実は
FSOによる検索処理は、通常 FileSearchよりは高速に動作します。
(といっても Dir関数のLoopに比べれば、格段に遅いし、Dir関数よりも
Dirコマンドのほうが速いですし、もちろんFind File系のAPIが最速ですが)
なので、遅くなった理由は FSO に切り替えたことより、
ひょっとして 後半の処理もなにか根本的なところを変更されていて
それが原因で、全体の動作が緩慢になっているとは考えられませんか?
後半の処理で、気になるところですが、
プロパティに何度もアクセスするのは遅くなる元です。プロパティで取得した
値は変数に格納して、それを使いまわししましょう。
具体的には
> If Len(myname) >= Len(ws1.Range("F2")) Then
以降に出てくる 「ws1.Range("F2")」です。
ひょっとしたら、この部分の記述は
If InStr(myname, ws1.Range("F2").Value) > 0 Then
'もし myname に ws1.Range("F2").Value が含まれていたら
ですむとか?
|
|