像往常一样,在最终屈服并寻求帮助之前,我已经浪费了几个小时来解决问题,所以任何帮助都将不胜感激!
我正在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
我想更改中间部分以执行搜索功能来查找与If
查询匹配的行,然后将其复制Cell_to_copy
到该行的单元格 L。
这可能吗?如果绝对必要,我可以将可搜索的值连接Test2
到一个单元格中,但如果可以避免,我宁愿不这样做,因为它会匹配一些误报。
提前致谢,
乔