【发布时间】:2015-07-06 05:22:15
【问题描述】:
我目前正在我的数据中使用数组公式来查找 O、Y 和 AA 列与当前行匹配且 A 列值不匹配的行,并为匹配行返回 C 列。
这是我的公式:
=INDEX(C:C,MATCH(1,(O:O=O2)*(Y:Y=Y2)*(AA:AA=AA2)*(A:A<>A2),0))
使用命名范围我已经能够使用 VBA 输入这个公式,但我真正想做的是使用 VBA 执行类似的功能并将结果值写入 D 列。
我在想可能是一个循环,对于从 2 到最后一行的每个 i,在匹配的范围内找到另一行并写入单元格(找到的行,3).value 到单元格(i, 4),但我不知道 VBA 数组查找匹配行的语法。
【问题讨论】:
-
要从 Excel 工作表中获取数组到 VBA 变量中,您可以使用以下内容对其进行赋值:aryArrayVariable() = Sheet1.Range("A1:Z100")。之后,您可以遍历数组并做任何您想做的事情,最后写回工作表。你可能想看看这个网站(以及以下五个部分)fastexcel.wordpress.com/2011/05/25/…
-
您可以在数组上使用查找函数,就像在工作表中使用它们一样。例如 WorksheetFunction.Match(ValueToLookFor,SomeArray,False),前提是 SomeArray 是二维的。
-
Worksheet.Evaluate()可用于数组公式,因此您应该几乎可以按原样使用公式。 -
当声明'并将结果值写入列D'时,您的意思是要在单独的行中返回大量值吗?如果是这样,将公式放入
.Formula.Array然后将结果恢复为其基础值可能是最好的方法。除非您处理内存块中的单个行并将结果转储回工作表,否则循环通过application.evaluate将非常耗时。
标签: arrays vba excel rows matching