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)") 

我运行代码,我得到一列重复值 – 值等于第一个元素的索引。 这是不正确的。

当我尝试通过在工作表{= MATCH(A1:A10,Sheet2!A:A)}中的数组公式工作,并返回正确的索引为每个元素。

所以我的问题:如何使用评估函数返回一个完整的值范围?

有趣的问题。 我无法获得MATCH函数来使用VBA评估返回一个数组。 但是,下面的修改似乎工作,使用索引函数中的行参数的零(0)返回所有的行。 还要注意,我将match_type参数添加到Match函数。

 sh.Range("B1:B10").Value = sh.Evaluate("=INDEX(MATCH(A1:A10,Sheet2!A:A,0),0,1)") 

如果评估()不会让你开心,那么:

 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