我有一个输出单个值的数组公式,我想给出一大堆单元格相同的数组公式。问题是当我将数组公式分配给范围时,它以这样的方式解释公式,即它们共享对数组公式的单个调用的输出,而不是每个输出单独的值。
为了告诉你我的意思,我正在使用以下代码:
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
答案 0 :(得分: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
答案 1 :(得分:2)
而不是1美元,请尝试
INDIRECT(ADDRESS(1,COLUMN()))
答案 2 :(得分: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