visual two multidimensional matrices inicializar ejemplo dimensional declarar array arrays vba excel-vba excel-formula

arrays - two - Error con la fórmula de matriz en VBA



visual basic char array (2)

Al usar .FormulaArray en un rango de varias celdas, no es como poner una fórmula de matriz en la primera celda y llenar automáticamente. Deberías hacerlo explícitamente, en dos pasos. Su código, después de algunas correcciones, debería ser así:

'' 1- Enter the array formula in top cell Range("D2").FormulaArray = _ "=MAX(($A$2:$A$" & OutputLastRow & "=A2)*($B$2:$B$" & OutputLastRow & _ "=B2)*($C$2:$C$" & OutputLastRow & "))" '' 2- Then autofill down the column Range("D2:D" & OutputLastRow).FillDown

Alternativamente, puede usar la función AGGREGATE para hacer una fórmula "normal" que es exactamente equivalente a la suya:

Range("D2:D" & OutputLastRow).Formula = _ "=Aggregate(14, 6, ($A$2:$A$" & OutputLastRow & "=A2)*($B$2:$B$" & OutputLastRow & _ "=B2)*($C$2:$C$" & OutputLastRow & "), 1)"

A B C D east 1 56 west 5 98 east 1 78 west 5 99 south 3 23 east 2 45 south 3 67

Quiero obtener el valor máximo de la misma combinación de A + B concatenado. Por ejemplo, para east1, debería obtener 78 en la columna D. Para esto estoy usando VBA, pero el código no parece funcionar. Estoy usando una fórmula de matriz para eso.

Mi código es:

.Range("D2:D" & OutputLastRow).FormulaArray = "=MAX(("$A$2:$A$" & OutputLastRow=A2)*("$B$2:$B$" & OutputLastRow=B2)*("$C$2:$C$" & OutputLastRow))"

El código se está ejecutando sin ningún error, pero el resultado es incorrecto porque la celda A2 y B2 no se actualizan a medida que la fórmula desciende desde D2. A2 permanece como A2 y B2 como B2. Lo he intentado usando loop pero eso tampoco funciona.


Realmente no necesitas VBA para esto. En D1 ingrese la siguiente fórmula de matriz (usando Ctrl + Mayús + Entrar en lugar de simplemente Enter) y arrástrela hacia abajo

=MAX(IF(A1&B1=$A$1:$A$7&$B$1:$B$7,$C$1:$C$7))

Tu salida debería verse así:

La fórmula funciona porque MAX y MIN ignoran los valores FALSOS para A1&B1 = $A$1:$A$7&$B$1:$B$7 y operan solo en los resultados restantes. La fórmula de matriz hace que el A1&B1 se compare con el valor de "fila actual" por $A$1:$A$7&$B$1:$B$7 . Supongo que podría bloquear las columnas para $A1&$B1 así, pero en su ejemplo no era necesario.