将具有动态范围的索引匹配公式转换为VBA

时间:2018-01-08 22:26:22

标签: arrays excel vba indexing match

我原来的公式如下:

=INDEX(MIR!$A:$A,MATCH(1,(MIR!$H:$H=TRI!$W2)*(MIR!$I:$I=TRI!$L2),0))

我为此创建了以下VBA代码,虽然代码确实将公式添加到适当的范围,但公式不起作用。就像没有应用Array部分一样。我到处寻找这个想法,但我显然没有找到正确的位置。请指教。

Range("B2").Select
Selection.FormulaArray = _
    "=INDEX(MIR!C1,MATCH(1,(MIR!C8=TRI!RC23)*(MIR!C9=TRI!RC12),0))"
Range("B2", "B" & Cells(Rows.Count, 1).End(xlUp).Row).FillDown
End Sub

1 个答案:

答案 0 :(得分:1)

您正在使用xlR1C1表示法,但VBA正在将其读作xlA1表示法。 MIR!C1不是MIR!A:A,它是MIR工作表上的第一行,第三列(例如MIR!C1)。该公式被放在工作表上,

=INDEX(MIR!C1,MATCH(1,(MIR!C8=TRI!RC23)*(MIR!C9=TRI!RC12),0))

在xlA1表示法中使用公式。

Range("B2").FormulaArray = "=INDEX(MIR!$A:$A,MATCH(1,(MIR!$H:$H=TRI!$W2)*(MIR!$I:$I=TRI!$L2),0))"

顺便说一下,你应该把MATCH中的那些完整的列引用切换到使用的数据范围。