VBA评估返回值范围的函数和数组公式

时间:2014-12-27 17:13:55

标签: excel vba excel-vba

假设我想使用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函数返回一系列值?

2 个答案:

答案 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