Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11944 / 76734 ←次へ | 前へ→

【70318】Re:FileSearchで苦労してます。
発言  kanabun  - 11/11/1(火) 16:21 -

引用なし
パスワード
   ▼すいまーひろ さん:こんにちは〜

>フォルダにテキストファイルがあり、それを読み込んで、先頭データが検索条件に一致したものだけをシートにリストアップします。
>今までは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 が含まれていたら

ですむとか?
8 hits

【70317】FileSearchで苦労してます。 すいまーひろ 11/11/1(火) 14:24 質問
【70318】Re:FileSearchで苦労してます。 kanabun 11/11/1(火) 16:21 発言
【70321】Re:FileSearchで苦労してます。 kanabun 11/11/1(火) 17:00 発言
【70323】Re:FileSearchで苦労してます。 すいまーひろ 11/11/1(火) 18:23 お礼
【70326】Re:FileSearchで苦労してます。 kanabun 11/11/1(火) 21:20 発言
【70329】Re:FileSearchで苦労してます。 すいまーひろ 11/11/2(水) 9:50 お礼

11944 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free