[英]Excel VBA Find All
像往常一样,在最终屈服并寻求帮助之前,我浪费了很多时间解决问题,因此,非常感谢您的帮助!
我在我的数据的表格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
复制到该行的Cell L上。
这可能吗? 如果绝对必要,我可以将来自Test2
的可搜索值连接到单个单元格中,但是我宁愿不要避免,因为它会匹配一些误报。
提前致谢,
乔
好的,规则似乎是
Test1.column A is found inside Test2.column A
Test1.column B is found inside Test2.column B
Test1.column D is found inside Test2.column I
Test1.column E is found inside Test2.column I
Test1.column F is found inside Test2.column G
然后将 Test1.column G 复制到Test2.L
那正确吗?
为什么不能在Sheet2上使用公式来做到这一点?
也许:Test2.L列公式= =IF(FIND(A:A,Sheet1!A:A)>0,Sheet1!G:G)
该公式需要与其他条件进行OR
才能检查其他列-午餐后尝试!
如果没有,那么确定,在这里,我认为我们需要考虑使用ADO并将工作表视为db表。
如果您显示源数据的样子以及所需的结果,我可以尝试为您编写示例,但是到目前为止,最好的选择是让您学习使用以下链接进行钓鱼 。
参见此处: MSDN KB:如何将ADO与Visual Basic或VBA中的Excel数据一起使用
并在Excel用户MVP网站上阅读: 将Excel视为关系数据源
并阅读: Office Space:使用ADO查询Excel电子表格
基本上,任务是将所需的过滤数据读取到ADO Recordset中,然后使用CopyFromRecordset方法将结果转储到Sheet2中
因此,您需要阅读一些内容,如果您需要示例或更多帮助,请告诉我们
菲利普
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.