- ベストアンサー
高速なロジックは?
お世話になります。 エクセルで次のような処理をする時、 高速と思われるVBAのロジックをご教授ください。 --------------------------------------- ●データ仕様 Sheet1、2のA列にコードがそれぞれ5万行 Sheet1のコードはユニーク Sheet2にはダブりもある ●処理内容 Sheet2にSheet1と同じコードあった場合は Sheet2の該当行B列に、Sheet1の行番号を表示 ------------------------------------------ (1)コードが、数値のみの場合 (2)コードが、文字数字混在の場合 考え方だけで結構ですので宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>(2)コードが、文字数字混在の場合 で、まさか、文字列 = CStr(数値)ということはないと思います。 そうでなかったら、Excelの場合は、Sheet1側は、列をA:A をRangeオブジェクトに入れ、検索値としてSheet2 のデータは配列に入れ、 Application.Match(検索値,範囲(Range),0) で、Sheet1のA:Aを検索させれば、そのまま戻り値で行番号が得られます。 また、エラーが返るときは、Matchの戻り値は、IsError で取れます。 Match関数で行うのが最も反応が早いはずです。
その他の回答 (3)
- komet163
- ベストアンサー率51% (22/43)
こんにちは。 Access をお持ちなら、シートをテーブルに 掃き出して、クエリを組めば一発です。 上記の一連の操作をExcel VBA で記述して、 結果もエクセルシートに返すように作れば、 ユーザにはエクセルのみ見せて、アクセスを 意識させずに処理もできます。 しかし、テーブルメンテを考えるなら、 以後はアクセスにてデータ更新すべきですが。 以上、アクセスが所有されていることを前提に書きました。
お礼
早速の回答ありがとうございます。 有意義なアドバイスいただきましたが 今回はあくまでもエクセル使用ということで 申し訳ありません。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Sheet1のコードをソートしておき Sheet2のコードを2分検索する。 Sheet1のコードがソートされていてユニークだったら、VBAを使うまでもないような気がいたします
お礼
早速の回答ありがとうございます。 >VBAを使うまでもないような VBAの勉強ということで・・・。
- hana-hana3
- ベストアンサー率31% (4940/15541)
処理としては単純ですが、「重複セルの探し方」で速度が変化します。 下記の「VBA 高速化テクニック」を参考にして、組んでみてください。
お礼
早速の回答、ありがとうございます。 ご紹介のサイトじっくり読ませて頂きます。
お礼
早速の回答ありがとうございます。 アドバイス、試してみたいと思います。