Tengo una fórmula de matriz que genera un solo valor, y quiero darle a un montón de celdas esta misma fórmula de matriz. El problema es que cuando asigno la fórmula de matriz al rango, interpreta la fórmula de tal manera que todos comparten la salida de una sola llamada a la fórmula de matriz, en lugar de que cada uno de ellos genere un valor por separado.Establezca ArrayFormula en muchas celdas de Excel usando VBA
para mostrar lo que quiero decir, estoy usando el siguiente código:
With MarginalData
.Range(.Cells(2, 1), .Cells(13, .UsedRange.Columns.Count)).FormulaArray = pullFormula
End With
Lo que quiero, es un resultado que se ve así:
Eso es lo que se parece cuando ingreso la fórmula de matriz por separado en cada celda del rango.
Pero lo que me pasa es la siguiente:
La salida de la fórmula de matriz en la primera celda se repite en todas las columnas - todos ellos comparten la misma salida.
¿Cómo puedo asignar programáticamente la fórmula de matriz como si cada celda la tuviera asignada por separado?
La fórmula es:
{= índice (BatchResults, Partido (TTID & CHAR (1) & ROW() - 1, BatchResultsTTIDS & CHAR (1) & BatchResultsLayers, 0), (! a $ 1, BatchTTIDData $ 1: $ 1,0) pARTIDO)}
será metido en como una fórmula de matriz, ya que realiza un fósforo no en una sola columna, pero en dos columnas concatenadas. La concatenación de las columnas se debe devolver como una matriz, por lo tanto, la fórmula se debe ingresar como una fórmula de matriz.
La solución más simple hasta el momento, una variante de la respuesta aceptada a continuación, es el siguiente:
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
Necesita ser capaz de hacer depender 'pullFormula' en la celda que se encuentra, pero necesitamos la cadena para que eso le mostrará cómo hacer que eso suceda (si es posible). –
Como puede ver arriba, pullFormula ya depende de la celda en la que se encuentra. Tiene en cuenta la fila actual y el encabezado de columna ('A $ 1'), que es diferente para cada columna. – Alain
Buena pregunta. Y según [este artículo] (http: //colinlegg.wordpress.com/2012/05/23/working-with-range-formulaarray-in-vba /) tiene el mejor enfoque – brettdj