2つのエクセルシートより、1つのエクセルシートを作成しております。
基本的には作成できたのですが、処理速度が遅くて困っております。
AとBのエクセルシートがあり、
r=1
として
エクセル1の(r,A)のセル内の値をエクセル2のA列の中から検索していって、
あればエクセル2の該当する行のC列に入っている値を抽出する。
という処理を行っているのですが(分かりにくいですね)
毎回、エクセル2のA列の値の全件検索を行ってしまっています。
(見つかればそこで検索処理は終了するのですが、ない場合は一番下まで検索して、ない用の処理を行っています。)
ACCESSとかだとSQL文を使用して、検索できるのですが、
EXCELはデータベースとして扱うのはできるのですか?
私は、全件検索しか方法はないかなと思っていたのですが。。。
もし可能であれば、なにかヒントを御願い致します。
> EXCELはデータベースとして扱うのはできるのですか?
一応は、ADOやDAOのRecordsetとして扱う事ができますが、
個人的には、あまりお奨めしません。
素直に、ExcelのFindメソッドを使って検索された方が良いかと。
内容からすると、For 〜 Next 文を使用しているようですネ。
行が多いと時間がかかるでしょうネ。
魔界の仮面弁士さんのおっしゃるように Find を使用した方がはるかに
高速になりますが、追加でアドバイスです。
Excelシートの大きさにもよりますが、シート全体を検索するより
検索対象の場所が決まっているのなら、Rangeを設定するとより高速に
なります。
かかしさんの場合のように「エクセル2のA列の中から」と場所が決まっ
ているのなら
Dim RA as Range
Dim var as Variant
Set RA = Range("A1:Axxx") ' xxx=最終行
Set var = RA.Find(what:="検索word")
としたほうが
Set var = Cells.Find(what:="検索word")
より、高速に検索できます。
魔界の仮面弁士様 まさお様
ご回答有難う御座いました。
無事、解決することができました。
また、まさお様の回答を踏まえ、処理速度が非常に上がりました。
ご参考までに、作成した結果を以下に記載します。
Dim RA As Range
Dim var As Variant
Set RA = Range("A1:A5000") ' 5000=最終行
Set var = RA.Find(what:=uketsuke)
m = xlSheet2.Cells.Find(uketsuke).Row
n = xlSheet2.Cells.Find(uketsuke).Column
xlSheet.Cells(r,s).Value = xlSheet2.Cells(m, n).Value
'r・sは変数として宣言
'(r,s)のワクに検索した値をはめ込む
ツイート | ![]() |