• ベストアンサー

高速なロジックは?

お世話になります。 エクセルで次のような処理をする時、 高速と思われるVBAのロジックをご教授ください。 --------------------------------------- ●データ仕様 Sheet1、2のA列にコードがそれぞれ5万行 Sheet1のコードはユニーク Sheet2にはダブりもある ●処理内容 Sheet2にSheet1と同じコードあった場合は Sheet2の該当行B列に、Sheet1の行番号を表示 ------------------------------------------ (1)コードが、数値のみの場合 (2)コードが、文字数字混在の場合 考え方だけで結構ですので宜しくお願いします。

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

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

>(2)コードが、文字数字混在の場合 で、まさか、文字列 = CStr(数値)ということはないと思います。 そうでなかったら、Excelの場合は、Sheet1側は、列をA:A をRangeオブジェクトに入れ、検索値としてSheet2 のデータは配列に入れ、 Application.Match(検索値,範囲(Range),0) で、Sheet1のA:Aを検索させれば、そのまま戻り値で行番号が得られます。 また、エラーが返るときは、Matchの戻り値は、IsError で取れます。 Match関数で行うのが最も反応が早いはずです。

StudyVBA
質問者

お礼

早速の回答ありがとうございます。 アドバイス、試してみたいと思います。

その他の回答 (3)

  • komet163
  • ベストアンサー率51% (22/43)
回答No.4

こんにちは。 Access をお持ちなら、シートをテーブルに 掃き出して、クエリを組めば一発です。 上記の一連の操作をExcel VBA で記述して、 結果もエクセルシートに返すように作れば、 ユーザにはエクセルのみ見せて、アクセスを 意識させずに処理もできます。 しかし、テーブルメンテを考えるなら、 以後はアクセスにてデータ更新すべきですが。 以上、アクセスが所有されていることを前提に書きました。

StudyVBA
質問者

お礼

早速の回答ありがとうございます。 有意義なアドバイスいただきましたが 今回はあくまでもエクセル使用ということで 申し訳ありません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Sheet1のコードをソートしておき Sheet2のコードを2分検索する。 Sheet1のコードがソートされていてユニークだったら、VBAを使うまでもないような気がいたします

StudyVBA
質問者

お礼

早速の回答ありがとうございます。 >VBAを使うまでもないような VBAの勉強ということで・・・。

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

処理としては単純ですが、「重複セルの探し方」で速度が変化します。 下記の「VBA 高速化テクニック」を参考にして、組んでみてください。

参考URL:
http://www.officetanaka.net/excel/index.htm
StudyVBA
質問者

お礼

早速の回答、ありがとうございます。 ご紹介のサイトじっくり読ませて頂きます。