假设我想使用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)")
Whan我运行代码,我得到一列重复值 - 值等于第一个元素的索引。这是不正确的。
当我通过在工作表{= MATCH(A1:A10,Sheet2!A:A)}中放置数组公式来尝试相同时,它可以正常工作并为每个元素返回正确的索引。
所以我的问题:如何使用Evaluate函数返回一系列值?
答案 0 :(得分:5)
有趣的问题。我无法使用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)")
答案 1 :(得分:2)
如果 Evaluate()不能让您满意,那么:
Sub marine()
Dim sh As Worksheet, r As Range
Set sh = Sheets("Sheet1")
Set r = sh.Range("B1:B10")
r.FormulaArray = "=MATCH(A$1:A$10,Sheet2!A:A,0)"
r.Copy
r.PasteSpecial xlPasteValues
End Sub