6

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

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

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

我想要的是这样的结果: 期望的结果

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

我得到的是: 给定结果

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

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


公式为:

{=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
4

3 回答 3

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
于 2011-05-18T17:52:04.117 回答
1

而不是 1 美元,请尝试

INDIRECT(ADDRESS(1,COLUMN()))
于 2011-05-18T17:48:53.320 回答
1

尝试半自动完成。为第一行设置公式,然后使用 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
于 2011-05-19T13:16:43.670 回答