• ベストアンサー

エクセルVBAで

いつもお世話になります。 VBAでfor:nextとifを使って検索していますが、セル数が多くて結構時間がかかってしまいます。 for:nextを使わずセルの検索したい範囲を指定して、検索をかけることは可能でしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.1

findメソッドを、お調べ下さい。

keiri2002
質問者

お礼

御礼遅くなりすいません。 >findメソッドを、お調べ下さい。 上級者しか意味ないヘルプは見ても殆ど分かりません。(TT) 因みにメソッド?オブジェクト?という感じです。 findはなんか使えそうなので使わせていただきます。 ありがとうございました。

その他の回答 (3)

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

何を検索にするかによって違ってきますが、ふつう、セルを1つずつアクセスすれば、検索が遅くなってしまいます。For ~ Next 文でも、一旦、領域を変数に入れて、hana-hana3 さんの示したようなFor Each In ~ Next で検索すれば速くなりますし、領域を配列に入れなおし、Versionにもよりますが、それが、String 型にしてあれば、もっと検索スピードがあがります。 Findメソッドでよいのか、それとも、ワークシート関数を用いるべきかは、もう少し、具体的な内容がないと、適切なアドバイスは無理かと思います。ただ、ワークシート関数は、VBAメソッドと比較して、10分の1以下のスピードですが、エラーの際の処理が必要になります。

keiri2002
質問者

お礼

御礼遅くなりすいません。 >領域を配列に入れなおし >String 型 >メソッド ???です。 今回はFind関数でいきます。 ありがとうございました。

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

一列なら、Lookup 複数列なら Find です。 それよりも速度が遅くなりますが、従来の方法に近い物として、下記の方法があります。 Dim C As Range For Each C In Range(セル範囲) '処理 Next 他に、 Application.InputBox() 関数で、入力メッセージを表示して、シートの範囲を選択して入力することが出来ます。 詳細はヘルプやネット・書籍などを参考にしてください。

keiri2002
質問者

お礼

御礼遅くなりすいません。 lookup関数同様データベースの範囲を指定しないといけませんよね? 範囲の自動指定が出来ればいいのですが。。。 今回はfind関数でいこうかなと思います。はっきり分かってないですけど。。。 >詳細はヘルプやネット・書籍などを参考にしてください ヘルプは悲しいかな役に立たないです。(TT) いい本探してみます。 ありがとうございました。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

find以外にlookup関数なども使えます。 http://www.officetanaka.net/excel/vba/speed/s9.htm

keiri2002
質問者

お礼

御礼遅くなりすいません。 lookup関数はデータベースの範囲を指定しないといけませんよね? データが日々増えていきますので、その都度範囲の指定をしなければいけないのが難点です。自動で出来ればいいのですが。。。 今回はfind関数でいこうかなと思います。はっきり分かってないですけど。。。 ありがとうございました。

関連するQ&A