Tengo una fila que quiero completar con fórmulas como
=SUMPRODUCT(B93:B96,B46:B49)/SUM(B46:B49)
=SUMPRODUCT(C92:C95,C45:C48)/SUM(C45:C48)
=SUMPRODUCT(D91:D94,D44:D47)/SUM(D44:D47)
pero arrastrar la fórmula solo cambia la parte alfabética del índice. ¿Hay alguna forma de que Excel cambie correctamente los índices de la matriz?
Respuesta1
Según tengo entendido, tienes una celda con fórmula =SUMPRODUCT(B93:B96,B46:B49)/SUM(B46:B49)
y quieres llenarla correctamente para que la celda de la siguiente columna pero en la misma fila tenga la fórmula =SUMPRODUCT(C92:C95,C45:C48)/SUM(C45:C48)
. Es decir, desea que la columna aumente en 1 como de costumbre, pero también que la fila disminuya en 1.
Puedes lograr esto usando la OFFSET
función. Esto le permite construir un rango que esté a una distancia específica de un rango conocido. Podemos usar la COLUMN
función para especificar cuánto desplazamiento queremos.
Los rangos que queremos son B93:B96
y B46:B49
, compensados por -1 fila y +1 columna para cada columna después de la primera. Por lo tanto, OFFSET(B93:B96, -1, 1)
devolverá una referencia a C92:C95
. Sin embargo, nuestra referencia actualizará naturalmente la columna, por lo que podemos dejar la columna desplazada.
Para el rango que está B93:B96
en la fórmula original, en la primera celda queremos OFFSET(B93:B96, 0, 0)
, en la segunda queremos OFFSET(C93:C96, -1, 0)
, en la tercera queremos OFFSET(D93:D96, -2, 0)
y así sucesivamente. Podemos usarlo =COLUMN(A1)
para obtener un resultado que es el número de la columna actual (porque la referencia se actualizará a B1 en la segunda columna, etc.). Combinando estos, podemos usar
OFFSET(B93:B96, 1 - COLUMN(A1), 0)
el cual podemos simplificar alterando la referencia:
OFFSET(B94:B97, -COLUMN(A1), 0)
En la primera celda, esto se traduce en OFFSET(B94:B97, -1, 0)
cuál es B93:B96
. En la segunda celda, la fórmula se completará como OFFSET(C94:C97, -COLUMN(B1), 0)
está C92:C95
.
Entonces las dos referencias que necesitamos son OFFSET(B94:B97, -COLUMN(A1), 0)
y OFFSET(B47:B50, -COLUMN(A1), 0)
. Por tanto la fórmula será
=SUMPRODUCT(OFFSET(B94:B97, -COLUMN(A1), 0), OFFSET(B47:B50, -COLUMN(A1), 0)) / SUM(OFFSET(B47:B50, -COLUMN(A1), 0))
Hay una última complicación. Cuando estaba probando esto en mi copia de Excel 2007, encontré que dentro de la SUMPRODUCT
fórmula, COLUMN(A1)
devolvía unformaciónque contiene el valor 1, en lugar de solo el valor 1. (Puede ver esto en el cuadro de diálogo Evaluar fórmula: cuando evalúa, COLUMN(A1)
el resultado es {1}
en lugar de solo 1
, y la SUMPRODUCT
expresión obtiene dos #VALUE!
argumentos y termina siendo 0). Dependiendo de su versión, es posible que esto no te suceda. Si es así, envuelva el COLUMN(A1)
interior a SUM()
, así:
=SUMPRODUCT(OFFSET(B94:B97, -SUM(COLUMN(A1)), 0), OFFSET(B47:B50, -SUM(COLUMN(A1)), 0)) / SUM(OFFSET(B47:B50, -COLUMN(A1), 0))
Notarás que no he envuelto el final COLUMN(A1)
en un SUM()
; eso se debe a que éste devolvió un número como de costumbre, no una referencia de matriz. Supongo que dado que la SUM
función no acepta referencias a matrices, Excel se dio cuenta de que no queríamos una matriz COLUMN
en este caso.