使用VBA将ArrayFormula设置为许多Excel单元格

Ala*_*ain 7 excel vba array-formulas

我有一个输出单个值的数组公式,我想给一大堆单元格这个相同的数组公式.问题是当我将数组公式分配给范围时,它以这样的方式解释公式,即它们共享对数组公式的单个调用的输出,而不是每个输出单独的值.

为了告诉你我的意思,我使用以下代码:

With MarginalData
    .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula
End With
Run Code Online (Sandbox Code Playgroud)

我想要的是一个看起来像这样的结果: 期望的结果

当我在范围中的每个单元格中分别输入数组公式时,它就是这样.

我得到的是: 结果

第一个单元格中的数组公式的输出在所有列中重复 - 它们共享相同的输出.

我如何以编程方式分配数组公式,就像每个单元格分别分配一样?


公式是:

{= INDEX(!BatchResults,MATCH(TTID&CHAR(1)&ROW() - 1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A $ 1,$ BatchTTIDData 1:$ 1,0))}

它必须作为数组公式放入,因为它不是在单个列上执行匹配,而是在两个连接列上执行匹配.列的串联必须作为数组返回,因此必须将公式作为数组公式输入.


到目前为止,最简单的解决方案是以下接受的答案的变体:

Const pullFormula = "=INDEX(BatchResults,MATCH(TTID&CHAR(1)&ROW()-1,BatchResultsTTIDS&CHAR(1)&BatchResultsLayers,0),MATCH(A$1,BatchTTIDData!$1:$1,0))"
With wrksht
    With .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count))
        .Formula = pullFormula
        .FormulaArray = .FormulaR1C1
    End With
End With
Run Code Online (Sandbox Code Playgroud)

osk*_*ows 5

或者将数组公式选取为R1C1,将范围指定为FormulaR1C1,然后将FormulaR1C1指定为数组公式.这假设数组公式在单元格A2中

Sub test()

With Sheet1
    pullFormula = .Range("A2").FormulaR1C1
    Set Rng = .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count))

    Rng.Formula = pullFormula
    Rng.FormulaArray = Rng.FormulaR1C1

End With
End Sub
Run Code Online (Sandbox Code Playgroud)