Установить ArrayFormula для множества ячеек Excel с помощью VBA

У меня есть формула массива, которая выводит одно значение, и я хочу дать целой группе ячеек эту же формулу массива. Проблема в том, что когда я назначаю формулу массива диапазону, она интерпретирует формулу таким образом, что все они совместно используют выходные данные одного вызова формулы массива, а не каждый из них выводит отдельное значение.

показать, что я имею в виду, я использую следующий код:

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

Что я хочу , desired result

Вот как это выглядит, когда я ввожу формулу массива отдельно в каждую ячейку диапазона.

Но я получаю следующее: given result

Вывод формулы массива в первой ячейке повторяется во всех столбцах - все они имеют один и тот же вывод.

Как я могу программно назначить формулу массива, как если бы она была назначена каждой ячейке отдельно?


Формула:

{= ИНДЕКС (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
7
задан Alain 19 May 2011 в 15:42
поделиться