いつものように、私は最終的に屈服して助けを求める前に、問題に取り組むのに何時間も無駄にしました。
Test1
パラメータが一致するシートの特定の行にデータをコピーするために、データのシートでwhileループを実行していますTest2
が、現在これを行っている方法は、シート2のすべての行をループすることです-両方のシートデータの長さは 50,000 行を超えているため、私の方法は 10 行のテストでは完全に機能しますが、完全なデータを処理するには数時間かかります。理想的には、各行を比較するのではなく、一致する行を検索できるように、誰かが私のコードを単純化できるかどうか疑問に思っていましたか?
使用してみFind
ましたが、複数のパラメーターで動作させることができませんでした。
これは私の現在のコードです。スペースを節約するためにパラメーター設定を設定した部分を省略しましたが、ワークシートに存在します。
While row1 <= lastRow1
Param1 = Sheets("Test1").Cells.Range("A" & row1).Value
Param2 = Sheets("Test1").Cells.Range("B" & row1).Value
Param3 = Sheets("Test1").Cells.Range("D" & row1).Value
Param4 = Sheets("Test1").Cells.Range("E" & row1).Value
Param5 = Sheets("Test1").Cells.Range("F" & row1).Value
Cell_to_copy = Sheets("Test1").Cells.Range("G" & row1).Value
*****THIS IS THE BIT I WANT TO OPTIMISE************
For row2 = 2 To lastRow2
KParam1 = Sheets("Test2").Cells.Range("A" & row2).Value
KParam2 = Sheets("Test2").Cells.Range("B" & row2).Value
KParam3 = Sheets("Test2").Cells.Range("I" & row2).Value
KParam5 = Sheets("Test2").Cells.Range("G" & row2).Value
If (InStr(1, KParam1, Param1) > 0) _
And ((InStr(1, KParam2, Param2) > 0) Or (InStr(1, Param2, KParam2) > 0)) _
And ((InStr(1, KParam3, Param3) > 0) Or (InStr(1, KParam3, Param4) > 0)) _
And (InStr(1, KParam5, Param5) > 0) _
Then
Sheets("Test2").Cells.Range("L" & row2).Value = Cell_to_copy
End If
Next row2
****************************************************
row1 = row1 + 1
Wend
代わりに検索機能を実行してクエリに一致する行を見つけ、その行のセル L にIf
コピーするように中央のセクションを変更したいと思います。Cell_to_copy
これは可能ですか?絶対に必要な場合は、検索可能な値をTest2
単一のセルに連結できますが、誤検出と一致するため、回避できる場合は避けたいと思います。
前もって感謝します、
ジョー