作者:闪亮登台 | 来源:互联网 | 2023-05-29 13:16
假设我想使用Evaluate函数来计算返回一系列值的数组公式.例如,我尝试在Sheet2的有序列表中获取索引(使用Excel函数MATCH)!A:A表示Sheet1中的每个值!A:A.我想把索引放在B栏.
Dim sh as Worksheet
Set sh = Sheets("Sheet1")
sh.Range("B1:B10").Value = sh.Evaluate("=MATCH(A1:A10,Sheet2!A:A)")
我运行代码,我得到一列重复值 - 值等于第一个元素的索引.这是不正确的.
当我通过在工作表{= MATCH(A1:A10,Sheet2!A:A)}中放置数组公式来尝试相同时,它可以正常工作并返回每个元素的正确索引.
所以我的问题:如何使用Evaluate函数返回一系列值?
1> Ron Rosenfel..:
有趣的问题.我无法使用MATCH函数返回使用VBA Evaluate的数组.但是,以下修改似乎可行,使用索引函数中的row参数的零(0)返回所有行.另请注意,我将match_type参数添加到Match函数.
sh.Range("B1:B10").Value = sh.Evaluate("=INDEX(MATCH(A1:A10,Sheet2!A:A,0),0,1)")
当你在这里使用Evaluate时,你总是需要强制一个自然不是数组公式的函数.注意,您可以简单地使用INDEX(函数,没有任何显式参数)或IF(ROW(范围),函数)构造.