• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

これに答えられる人は、エクセルの内部構造まで知っている人で、MS社内でも開発に携わる人か、それと対抗して表計算ソフトを開発するために研究している人であろうと思いますが、そう言う人は社内機密保持もあって、そうやすやすと説明しないでしょう。また残念ながら忙しくてOKWEBを見ていないでしょう。また説明されても、理解するには予備知識が相当必要で、すぐは理解できないかもしれません。私も非常に知りたいテーマですが、当面諦めましょう。 ただ推測できることは、(1)出来るだけメモリの中で展開して処理していること(2)ソフトはコンパイル済みの機械語になっているので処理が早いこと(3)初めから256x65536のセルを用意するので無く、使われたセルだけメモリに展開するようになっていること、(4)単純に配列のようなことでなく、データ構造やアルゴリズムに工夫が凝らしてあるはず(ここがポイント!)。(5)それと書式や関数式や範囲名等がセルに重層的になっていてややこしそうです。 ただVisicalc以来LOTUS123を経て表計算ソフトの仕組みには定番的な構成・処理タイプが出来あがっていると思うので、大学院ででも勉強する機会に出くわすかも知れません。知ったかぶりしてますが本当のところはわかりません。ただ体力勝負でプログラムを書いたのでなく、理論に裏打ちされてプログラムが出来ているはずで、深い人類の叡智が隠されていることは間違い無いと思いますが、その美しさを理解するには、こちらもそのレベルにふさわしい勉強をしないとならないとと思います(例えば C言語的なもの、検索のアルゴリズムなど、検索しやすい、データのメモリ展開などか)。 私はToo Oldですが、お若い方とお見受けしますが、今後関心を持って頑張ってください。 ただ日本語の市販の本を読んでも載っていないでしょう。外国の関連の本を探すか、論文を当たるほか無いでしょう。OPENOFFICE.ORGのように処理が公開されている(?)ものを研究する方が近道かも知れません。 http://ja.openoffice.org/index2.html 「オープンソース」という方針で開発されている。とあります。

mk1234
質問者

お礼

回答ありがとうございます。 大変詳しくいろいろとありがとうございます。 具体的な内容は判らなくても、雰囲気は伝わりました。 実は私もToo Oldなので、イメージが分かれば十分です。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

秘密については解かりませんが、、、 ループで探して処理しているなら、その部分を Find メソッド に置きかえれば速くなるのでは?

mk1234
質問者

お礼

回答ありがとうございます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

多くのセルや複数条件での検索は、VBAでオートフィルタを設定して利用すると、プログラム検索するよりも検索時間が大幅に短縮されます。 VBAの場合、エクセルのデータとはセル関数を経由してやりとりが行われているので、何をやってもエクセル本体との通信時間が必要になりますので、動作はどうしても遅くなるは仕方ないと思います。

mk1234
質問者

お礼

回答ありがとうございます。

  • HAL007
  • ベストアンサー率29% (1751/5869)
回答No.1

双方が具体的にどの様な処理をしているのかは知らないので 時間のギャップなどと考え会わせた想像です。 1.VBAはインタープリンタですからマクロをマシン語に翻訳しながら  実行しているはずです。他方Excelはコンパイル済みなので  マシン語になったもので実行しています。即ち翻訳の時間が  要らない。 2.データのハンドリングの相違からスピードの差が出る。  これが決定的だと思いますがメモリーに展開されたデータ  を直接検索ルーチンが処理するExcelに対して  VBAはアプリケーション間通信を使ってデータを読む為に  余分なステップを行う必要がある。

mk1234
質問者

お礼

回答ありがとうございます。 メモリーに展開されたデータを直接扱っているというところがポイントでしょうか。

関連するQ&A

専門家に質問してみよう