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

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

为了向您展示我的意思,我使用下面的代码:

With MarginalData .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula End With 

我想要的 ,是这样的一个结果: 预期的结果

这就是当我在范围内的每个单元格中分别input数组公式时的样子。

但是我得到的是这样的: 给出结果

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

我如何编程式分配数组公式,好像每个单元格都分开分配?


公式是:

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

它必须作为数组公式进行匹配,因为它不是在单个列上进行匹配,而是在两个连接的列上进行匹配。 连接的列必须作为数组返回,因此公式必须作为数组公式input。


到目前为止,最简单的解决scheme是下面接受的答案的一个变种,如下所示:

 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 

或者选取Array Formula作为R1C1,将范围赋值为FormulaR1C1,然后将FormulaR1C1赋值为Array Formula。 这假定数组公式是在单元格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 

而不是1美元,尝试

 INDIRECT(ADDRESS(1,COLUMN())) 

尽量做到半自动。 为第一行设置公式,然后使用FillDown。

 Private Sub soCopyFormula() Dim MarginalData As Worksheet Set MarginalData = ActiveWorkbook.Worksheets("Sheet2") Dim oRange As Range Dim i As Integer With MarginalData Set oRange = .Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)) ' for each column For i = 0 To oRange.Columns.Count - 1 ' set first row oRange(1, i).FormulaArray = pullFormula ' copy down oRange.Columns(i).FillDown Next End With End Sub