У меня есть формула массива, которая выводит одно значение, и я хочу дать целую кучу ячеек этой же формуле массива.Проблема в том, что когда я присваиваю формулу массива диапазону, она интерпретирует формулу таким образом, что все они совместно используют вывод одного вызова формулы массива, а не каждый из них выводит отдельное значение.
Чтобы показать вам, что я имею в виду, я использую следующий код:
With MarginalData
.Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula
End With
То, что я хочу , это результат, который выглядит следующим образом: ![desired result](https://i.stack.imgur.com/Rs3rq.png)
Вот как это выглядит, когда я вписываю формулу массива отдельно в каждую ячейку диапазона.
Но , что я получаю , это: ![given result](https://i.stack.imgur.com/Auiru.png)
Вывод формулы массива в первой ячейке повторяется во всех столбцах - все они имеют один и тот же вывод.
Как программно назначить формулу массива, как если бы для каждой ячейки она была назначена отдельно?
Формула:
{= 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