使用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