• ベストアンサー

Excel実行速度の謎

Excel VBA 初心者です。 先日、複数のテキストファイルに含まれる任意の文字列の使用頻度を調べる簡単な プログラムをVBAで作りました。 指定したテキストファイルを開き、こちらのあらかじめ用意した任意の文字列の使 用回数を調べ、以下、次のファイルで同様な作業を繰り返します。 最後に、それぞれのファイルで使用されている文字列の頻度をファイル毎に上位1 00位までセルに書き出して終了、という簡単な内容です。 最初は作業用のパソコンで作成し、試行してうまくいったので、今度は周波数で倍 くらいの高速なパソコンで実行したところ、なぜか最初のパソコン上での実行速度 を2割ほど下回りました。しかもサンプル用のテキストファイルも同じなのに実行 時間にばらつきがあります。 ともにOSはXP、Excelは2003です。 単純に考えると、同じプログラムなら、性能の高いパソコン上のほうが実行速度も 速いと思うのですが・・・ Excel自体の設定方法で何か原因があるのかと思い、ツール・オプションで色 々やってみましたが変化はありません。 解決方法について何かご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2です。 私の思っていたコードの予想とは違いました。 >一度に大容量の読み込みをして文字列変数にいれると、妙に >おそくなるので、1Mbyteは経験値です。 1M byteという数字は、私も、そのぐらいの大きさで行うことは心がけています。テキスト型ですと、それで十分だということで処理しています。ただし、変数はVariant 型ですと、遅いですね。変数は、文字列型(String)にします。 そうすると、前述の中では、アンチウィルスや常駐物で、チェックをしている可能性ぐらいかな? >作成しているノートパソコンが非力なので。 それと、HDDのセクターの大きさが、詳しくは調べたことがないのですが、影響を受けますね。 #1さんのフラグメンテーションで、影響が出たとすれば、HDDの新しいとか古いとかは関係なです。それは、メインテの問題です。1M程度では、そんなにスピードの差が出るとは思えませんが。 そういえば、Excel自体は、グラフィックメモリが、相当に影響を受けますね。 BIOS-ハード側の使用しているメモリの影響というと、どうしようもないのですが、パソコンの総合能力を調べるアプリケーションソフト辺りで、比較してみるしかありませんね。それで、どう改善するとは言えませんが、ハード側が原因とすれば、諦めるしかないような気もします。 今は、どうも、回答にまとまりが付きません。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >指定したテキストファイルを開き、こちらのあらかじめ用意した任意の文字列の使 用回数を調べ、以下、次のファイルで同様な作業を繰り返します。 そのテキストファイルを開くものは、 Open ~ For Input でしょうか?それとも、TextStream なのでしょうか?後者の場合は、如実にそのスピードに影響が出るはずです。外部オブジェクトですから、当たり前ですね。 それともExcelに展開するのでしょうか。Excelでの展開の場合に障害になるのは、アドインとアンチウィルスです。 ただ、おっしゃっている作業は、そういうフリーソフトがあったと思いますね。 それはともかく、コードで、メモリ(キャッシュ)の中で処理するものは、他の比較にならないほど速いです。

606d14
質問者

補足

コメントありがとうございます。 細くさせていただきます。 テキストファイルはOpen ~ For Inputで開き、 一旦、一定長毎に文字列変数(1Mbyte程度)に流し込んでいます。 検索はVBAでその中で行い、また次に読み込みを行う 繰り返しです。Excelに展開はしません。大幅に遅くなりますので。 一度に大容量の読み込みをして文字列変数にいれると、妙に おそくなるので、1Mbyteは経験値です。 作成しているノートパソコンが非力なので。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

今回ご使用のPCは、同等のメモリ量でしょうか?  開くファイルのサイズが小さいものであれば関係ありませんが、ある程度以上大きくなると、Excel が処理する際に仮想記憶を利用するようになり、処理速度がディスク装置の性能や、フラグメンテーションの状況に大きく左右されます。  また、処理の途中で新たなファイルを読み込むようですから、こちらもディスク性能が大きく関係します。

606d14
質問者

補足

ご回答ありがとうございます。 メモリ量は高速な方が 開発機より倍のメモリ、 ディスクドライブは今年換装したばかりです。 検索するファイルを限定して、ファイル容量も小さくして 試行してみましたが、やはり動作は変わりませんでした・・

関連するQ&A

  • VBAでエクセルからのファイル名とテキスト化を自動で実行する方法

    マクロを実行して、エクセルのセルからファイル名とテキストファイルを自動で出力したいのですが、VBA初心者なのでプログラムの書き方がわかりません。 どうかVBAのプログラムの書き方を教えて下さい。 【マクロ実行前のエクセル状態】 1.エクセルのA列にファイル名1を入力 2.エクセルのB列にファイル名2を入力 3.エクセルのC列にテキスト出力させたい文字列を入力 【期待のマクロ動作】 ファイル名1+ファイル名2のファイル名でC列の文字列をテキストファイルで出力。 《例》 A B C 1 2 あ ⇒マクロ実行⇒ファイル名『12』テキスト内容『あ』 3 4 い ⇒マクロ実行⇒ファイル名『34』テキスト内容『い』 5 6 う ⇒マクロ実行⇒ファイル名『56』テキスト内容『う』 7 8 え ⇒マクロ実行⇒ファイル名『78』テキスト内容『え』 ・ ・ ・ ・ 上記の様に、一回のマクロ実行で入力されている列のセル全て がファイル名付きのテキストファイルとして出力をさせたいです。 申し訳ありませんが、よろしくお願いいたします。

  • エクセル2002を2003で実行させたい。

    エクセル2003で作成したものを修正したのですが 実行できなかったので2002で試してみたら実行できました。 VBAにはあまり詳しくなのですが、列を左に3列ずらすという だけのものなのでプログラムの中の記述で  tugi = 3 + tuki の3をとり tugi = tuki としただけのものです。 2002では実行できるのですが、これを2003で実行させようとすると 「型が違います」とエラーがでてしまいます。 何かアドバイスがありましたら宜しくお願いします。

  • VBAを実行しないと開けないエクセルファイル

    タイトルのようなエクセルファイルを作りたいです。 閲覧者がVBAの実行を認めない限り、閲覧不可にしたいのです。もし認めない場合はメッセージボックス等で「開くことができません」と表示され、エクセルが閉じるようにしたいです。 どのようなVBAのプログラムを組めば実行できますか?

  • VB.netで表示中のExcelファイルのパスの取得

    お世話になります。 現在VB.net(2005)を使い、任意のExcelファイルを表示するプログラムを作成済みです。 プログラムを実行後、いったん閉じ、再度プログラムを実行した際に前回開いたExcelファイルにデータを上書きするというプログラムを組みたいので、Excelファイルが開かれた段階で現在のパスをテキストファイルに書き込んでおき、そのテキストファイルを使いExcelファイルの指定を行おうとしているのですが、関数等を検索しているのですがなかなか思うような情報がないのでここで質問させていただいております。 Excelファイルのパスをテキストファイルに記述しておくという方法以外にも、「最近使ったファイルによる操作」という方法を考えたのですがVBAの情報しか見つけることができず・・・ どなたかお力添えをお願いいたします。

  • エクセルのVBAについて

    エクセルの列を上から一つづつ読み込み、Fという文字を発見したら、その下のセルを切り取って、他の列のヒトマス上のセルに貼り付ける。という作業をするプログラムを書き実行したいのですが、どのようにしたらいいでしょうか? できるだけ具体的に書いていただけるとありがたいです。このサイトを閲覧している方にくらべたらほぼ初心者ですので、VBAを起動する場面からかいていただけると幸いです。 よろしくおねがいします。

  • プログラム実行中にプログラムを書き換えるには?

    実行中のプログラムの中でそのプログラムの一部を書き換えて保存するにはどうすればいいですか? 例えば次のようなプログラムの場合、このプログラムの中でTEXT("最初の文字列");の部分の文字列を別な文字列に変更しプログラムを更新したいです。 (プログラム終了後にもう一度実行すると「moji[20]=」の部分は前回実行時に書き換えた文字列が代入されているようにしたい) #include<windows.h> int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int ncmdshow){ TCHAR moji[20]=TEXT("最初の文字列"); MessageBox(NULL,moji,TEXT("文字列表示"),MB_OK); return 0; } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • 実行速度と容量について

    PCの実行速度(軽さ)と、ハードディスクの容量は関係あるのでしょうか? 例えば、同じメモリやCPUを使っていたとして、ハードディスクが10GB/200GBのパソコンと、150GB/200GBのパソコンでは実行速度に差がでるのですか? PCの作業の処理をするのはメモリとCPUが主ということなので、ハードディスクは限界に達しない限り多くても少なくても同じなのかなとも思うのですが しかし、ハードディスクの仕様割合が高いとファイルを見つけるのが大変で実行速度も落ちるということもあるのでしょうか

  • エクセルVBAのprintステートメントについて

    エクセルVBAのprintステートメントについて エクセルVBAからテキストファイルに文字列を書き出す場合、output権限でテキストファイルを開いて、printで一行ずつ書き出すということをやっています。この際、テキストファイルの最終行の次の行に一行を書き出すのではなく、最終行の最後に追記することはできますでしょうか。 例えば、下記のようなテキストファイルの場合、cccの次の行に書き出すのではなく、 cccの直後に文字列を書きたいのです。 よろしくお願いします。 ファイルの始まり aaa bbb ccc <EOF> -- エクセル2003

  • (VBA)フォルダの中の複数のテキストファイルをエクセルに取り込みたい

    フォルダの中に複数のテキストファイルがあります。 それをVBAで1シートに1テキストファイルづつで取り込んで(区切り文字(#)、列のデータ形式(文字列)を指定して)作成済みのマクロを実行し、出力させたいのですが。。 データが大きいので5シートで1つのファイルにしたいです。フォルダの中にはテキストファイルが100ほどあるので、結果、エクセルファイルが20できればいいのですが。。 できればデスクトップに新しいフォルダが作成されてその中に出力されていくようにしたいです。 お力を貸してください。よろしくお願いします。

  • エクセルの処理速度について

    エクセルは約65000行とIVまでの列がある膨大なセルで構成されていますよね。 65000行に文字を入力しても、検索すると瞬時に見つけ出します。 わたしがVBAでプログラムを組むとすると、各セルが検索する文字と同じかどうかを一つのセルごとに確認します。 そうするとすごく時間が掛かるのですが、エクセルのメニューにある検索機能があんなに速く検索できるのはどんな秘密があるのですか?

専門家に質問してみよう