- ベストアンサー
Excel実行速度の謎
Excel VBA 初心者です。 先日、複数のテキストファイルに含まれる任意の文字列の使用頻度を調べる簡単な プログラムをVBAで作りました。 指定したテキストファイルを開き、こちらのあらかじめ用意した任意の文字列の使 用回数を調べ、以下、次のファイルで同様な作業を繰り返します。 最後に、それぞれのファイルで使用されている文字列の頻度をファイル毎に上位1 00位までセルに書き出して終了、という簡単な内容です。 最初は作業用のパソコンで作成し、試行してうまくいったので、今度は周波数で倍 くらいの高速なパソコンで実行したところ、なぜか最初のパソコン上での実行速度 を2割ほど下回りました。しかもサンプル用のテキストファイルも同じなのに実行 時間にばらつきがあります。 ともにOSはXP、Excelは2003です。 単純に考えると、同じプログラムなら、性能の高いパソコン上のほうが実行速度も 速いと思うのですが・・・ Excel自体の設定方法で何か原因があるのかと思い、ツール・オプションで色 々やってみましたが変化はありません。 解決方法について何かご教示いただけると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 私の思っていたコードの予想とは違いました。 >一度に大容量の読み込みをして文字列変数にいれると、妙に >おそくなるので、1Mbyteは経験値です。 1M byteという数字は、私も、そのぐらいの大きさで行うことは心がけています。テキスト型ですと、それで十分だということで処理しています。ただし、変数はVariant 型ですと、遅いですね。変数は、文字列型(String)にします。 そうすると、前述の中では、アンチウィルスや常駐物で、チェックをしている可能性ぐらいかな? >作成しているノートパソコンが非力なので。 それと、HDDのセクターの大きさが、詳しくは調べたことがないのですが、影響を受けますね。 #1さんのフラグメンテーションで、影響が出たとすれば、HDDの新しいとか古いとかは関係なです。それは、メインテの問題です。1M程度では、そんなにスピードの差が出るとは思えませんが。 そういえば、Excel自体は、グラフィックメモリが、相当に影響を受けますね。 BIOS-ハード側の使用しているメモリの影響というと、どうしようもないのですが、パソコンの総合能力を調べるアプリケーションソフト辺りで、比較してみるしかありませんね。それで、どう改善するとは言えませんが、ハード側が原因とすれば、諦めるしかないような気もします。 今は、どうも、回答にまとまりが付きません。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >指定したテキストファイルを開き、こちらのあらかじめ用意した任意の文字列の使 用回数を調べ、以下、次のファイルで同様な作業を繰り返します。 そのテキストファイルを開くものは、 Open ~ For Input でしょうか?それとも、TextStream なのでしょうか?後者の場合は、如実にそのスピードに影響が出るはずです。外部オブジェクトですから、当たり前ですね。 それともExcelに展開するのでしょうか。Excelでの展開の場合に障害になるのは、アドインとアンチウィルスです。 ただ、おっしゃっている作業は、そういうフリーソフトがあったと思いますね。 それはともかく、コードで、メモリ(キャッシュ)の中で処理するものは、他の比較にならないほど速いです。
- DIooggooID
- ベストアンサー率27% (1730/6405)
今回ご使用のPCは、同等のメモリ量でしょうか? 開くファイルのサイズが小さいものであれば関係ありませんが、ある程度以上大きくなると、Excel が処理する際に仮想記憶を利用するようになり、処理速度がディスク装置の性能や、フラグメンテーションの状況に大きく左右されます。 また、処理の途中で新たなファイルを読み込むようですから、こちらもディスク性能が大きく関係します。
補足
ご回答ありがとうございます。 メモリ量は高速な方が 開発機より倍のメモリ、 ディスクドライブは今年換装したばかりです。 検索するファイルを限定して、ファイル容量も小さくして 試行してみましたが、やはり動作は変わりませんでした・・
補足
コメントありがとうございます。 細くさせていただきます。 テキストファイルはOpen ~ For Inputで開き、 一旦、一定長毎に文字列変数(1Mbyte程度)に流し込んでいます。 検索はVBAでその中で行い、また次に読み込みを行う 繰り返しです。Excelに展開はしません。大幅に遅くなりますので。 一度に大容量の読み込みをして文字列変数にいれると、妙に おそくなるので、1Mbyteは経験値です。 作成しているノートパソコンが非力なので。