プロが教えるわが家の防犯対策術!

お願いします。
一行1件で900件程度のデータがあります。1件当たりの項目(列)は150ほどです。住所録.xlsというファイルです。
これとは別に、個別1.xls~個別30.xlsというファイルがあり、それぞれシートが30ずつあります。
このシート全てに同一の個票フォーマットを作りました。vlookupやifとvlookupの組み合わせ関数をそれぞれの該当セルに入れれば各データは取り出せるのですが、非常に重く実用に向きません。こういった作業を効率よく行えるマクロをお教え願えませんでしょうか?
宜しくお願いいたします。

A 回答 (3件)

なぜ、重くなるのか、というと、Vlookup などは、その戻り値を確保していないので、複数の場所に、そういった関数があると、すべてが連動してしまうからです。

簡単な方法は、再計算を手動にすることですが、意外に効率が落ちます。

それをそのまま、マクロに以下のように移植してあげればよいわけです。

Rtn = Application.WorksheetFunction.Vlookup(検索値,範囲,列番号,検索の型)

を、Rangeオブジェクトと、数値で与えてやればよいはずです。

Rtn は、エラーも返ることもあるので、注意してください。
If IsError(Rtn) =False Then
  MsgBox Rtn
End If

とでもしてください。
難しく考えないでよいと思います。

ただし、.Formula = "=式" のようなスタイルにはしないでください。

結局のところ、ワークシート関数にまさるマクロ関数はないと言っても過言ではありません。Find メソッドなど、VBAネイティブメソッドと比較すると、遥かに、ワークシート関数のほうが処理が速いです。

最後に、そのようなファイルは、Accessなどのデータベースに移したほうがよいのではないか、と個人的には思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
明快なご回答、是非使わせていただきたいと思います。
Accessは…会社のOfficeのバージョンアップのため、現在使用禁止令が出ていなければ使いたいところです。

お礼日時:2006/07/14 21:52

間違えてたらごめんなさい。

VLOOKUPが見つけるのは全て同一行ですか?ならMATCHで行を決めてINDEXで取り出すと飛躍的に変わる筈。
    • good
    • 0
この回答へのお礼

ありがとうございます。
vlookupとindexでそんなに変わるとは知りませんでした。参考にさせていただきました。

お礼日時:2006/07/15 15:31

言葉足らずでした。

ワークセルにMATCHで行を求めてINDEXにはそれを使えば検索が一度だけで済むという意味です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!