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))}

単一の列ではなく、連結された 2 つの列に対して一致を実行するため、配列数式として配置する必要があります。列の連結は配列として返される必要があるため、数式は配列数式として入力する必要があります。


これまでの最も簡単な解決策は、以下の受け入れられた回答の変形であり、次のとおりです。

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

A $ 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 に答える