Excel VBA查找全部

像往常一样,我已经浪费了几个小时在最后放弃和寻求帮助之前处理一个问题,所以任何帮助将不胜感激!

我在我的数据的Sheet Test1上运行一个while循环,以便将数据复制到Sheet Test2中的参数匹配的特定行,但是我目前正在执行此操作的方式也是循环遍历Sheet 2的每一行数据的长度超过5万行,所以尽pipe我的方法对我的10行testing非常有效,但要花费数小时才能处理完整的数据。 我想知道是否有人可以简化我的代码,理想情况下,它可以search匹配的行,而不是比较每个?

我曾尝试使用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 

我想更改中间部分,而是执行searchfunction来查找匹配If查询的行,然后将Cell_to_copy复制到该行的单元格L.

这可能吗? 如果绝对有必要的话,我可以将Test2的可search值连接到一个单元格中,但是我宁愿不要,如果可以避免的话,它会匹配一些误报。

提前致谢,

好的,所以规则似乎是,如果

 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.Column L.

是对的吗?

为什么你不能在Sheet2上使用公式呢?

可能:Test2.Column L formula = =IF(FIND(A:A,Sheet1!A:A)>0,Sheet1!G:G)

该公式需要一个OR其他条件的OR ,使其检查其他列 – 将尝试午餐后!

如果没有,那么好的,在这里我认为我们需要考虑使用ADO并将工作表视为一个数据库表。

如果你显示你的源数据和你需要的结果,我可以尝试为你写一个样本,但是到目前为止,最好的select是你学会使用下面的链接来钓鱼

请参阅此处: MSDN KB:如何使用Visual Basic或VBA中的Excel数据使用ADO

并阅读: 将Excel用作 Excel用户MVP网站上的关系数据源

并阅读: Office Space:使用ADO查询Excel电子表格

基本上,任务是将所需的过滤数据读入ADOlogging集,然后使用CopyFromRecordset方法将结果转储到Sheet2中

所以你有一些阅读要做,让我们知道如果你需要一个例子或更多的帮助

菲利普