• ベストアンサー

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

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

  • mk1234
  • お礼率94% (1832/1940)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • エクセル 文字列検索と検索した文字列が含まれるセルへのジャンプ

    エクセル教えてください。 VBAは使ったことがありません。 現在Q&Aを作っています。 かなりボリュームが増えてしまったので、 文字列検索ができるようにしたいと思っています。 そこで、あるセルに調べたい文字列を入力し、 検索ボタンを押すと、その文字列が含まれるセルにジャンプする。 こんな機能は、エクセルでできませんでしょうか? マクロを組んだりすればよいのでしょうか? 教えてくださいー。

  • エクセル 検索のVBAの参考プログラム

    エクセルでVBAを使って、検索キーワードの有る「行」のみ表示するVBAを作りたいです。 イメージとしては、1文字入力するたびに検索が実行され、その文字の有る「行」だけが表示されるイメージです。 実行の順番として考えるのは、 10 検索用のセルにキーワードが入力される 20 一文字入力されるたびに検索を実行する 30 検索ワードの有る行を表示し、無い行を非表示にする です。 補足 BASICの基礎知識はあります。 VBAの参考書を読み始めましたが、分かりません。。。 参考プログラム教えてもらえないでしょうか。 よろしくお願いします。

  • エクセルで『1600-』の文字列の処理

    エクセル2000でセルに入入力された『1600-』という文字列を『-1600』の数値として認識したいのですが、出来ません。どなたか分かる方お願いします。出来ればVBAを使いたくないのですが…。

  • エクセルのことで

    A列の各セルに英単語が1文字ずつ何百行に渡って入力されているとします。 1. A1セルからA列の末端のセルまでを一気に反転させる方法はあるでしょうか。 ようは、A1セルを反転させた後に末端のセルまでスクロールさせることなくA列全てを反転させたいのですが。 2. A列で同じ文字が入力されている行を瞬時に削除する方法はあるでしょうか。

  • セルをクリックするだけでネット検索できませんか?

    エクセルのセルの中に入力されている文字を、セルをクリックするだけでブラウザが開いて セルの文字を検索窓に自動で入力して検索してくれる機能はないでしょうか? VBAも多少使ったことがあります。 VBAのプログラムでもいいので上記のような事は出来ないでしょうか? よろしくお願いいたします。

  • Excel VBA マクロ 繰り返し処理について

    初めて、ご質問させて頂きます。excel2003で、VBAによる連続繰り返し処理をしたいのですが、プログラムの知識が全くありませんので、どなたかご教授頂けませんでしょうか。 VBAによる連続繰り返し処理の内容は、excelの1つの列に上から順番に、IPアドレスを4つずつ同じ値で、入力したいのです。 例:10.30.118.1、10.30.118.1、10.30.118.1、10.30.118.1、10.30.118.2、10.30.118.2、10.30.118.2、10.30.118.2、10.30.118.3、10.30.118.3、10.30.118.3、10.30.118.3、、、 上記の例の様に、1つの列上で上のセルから順番に、4つずつ同じ値を順番に、4000行程度入力したいのですが、手で入力するのは、大変時間がかかる為、自動で入力させたいと思っています。 恐らくfor文を使うのでしょうが、その構文がわかりません。 初心者で大変申し訳ないのですが、どなたかご教授下さい。

  • Excelのことですっごく困ってます!!!!

    エクセルでオートフィル機能を使うと連続データの入力や文字列などをコピーしたり出来ますよね!! そこで質問なんですが、数百の数値が入力されていて指定したセルに数式を入力してオートフィル機能を実行すれば簡単に全部にその数式が適用されるとは思うのですが、数百の数値の中に文字列が入力されている場合「0」か「エラー」が入力されてしまうと思うのですが、文字列だけを飛ばして数値入力されている行だけに数式を適用されるようにすることは出来ないのでしょうか???? データが限りない数あります。文字列の行に入力されてしまう「0」や「エラー」を消すだけでもかなりの数になってしまうのです。期限のあるものなのですごく困ってます!! エクセルの詳しい方大至急助けてください!!!!!!!!!!

  • エクセルについて教えてください。

    エクセルで質問です 営業をしています。今までのエクセルのデータ5年分の実績が蓄積されていますが検索と置き換えではなく 別のシートに検索専用のシートを作りたとえば(納期)(注文番号)などを明記すると何行目にあるか行数が検索できるようにしたいです。 そうすればいいか教えてください。 それと膨大な量なのでたとえば瞬時に445行目を見に行きたいときにマウススクロールでは時間がかかるので何か検索的なことを して瞬時にその列に行く方法を教えて頂けないでしょうか? 緊急でお願いいたします。 宜しくお願い致します。

  • エクセルでVBAのマクロを組みたい

    VBA初心者です。エクセルで大量の情報があるとき、A列の文字列が”****”であって、さらにB列の文字列が”++++”であるときの、C列の値を検索したい。それを1行目から最下行まで行いたい場合、どのようなプログラムになりますか、教えてください。よろしくお願いします。

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

専門家に質問してみよう