martes, 9 de enero de 2018

Replicar información de filas en columnas

Hoy haremos uso de las funciones matriciales para cruzar información insertada en filas en las columnas correspondientes, esto es, replicar los datos de filas en columnas.
Veamos en la imagen siguiente la idea:

Replicar información de filas en columnas



Se observa que al introducir un dato en C5, la formulación devuelve el dato en su correspondiente cruce, en la celda F4.
El tema de esta formulación es cruzar compras-ventas entre empresas, y que obviamente, una compra de A a B representa en el mismo instante una venta de B hacia A...


Nuestra fórmula matricial insertada en D5 será:
=INDICE(SI($C$3:$J$3="compra";DESREF($B$3;COINCIDIR(C$2;$B$4:$B$7;0);1;1;8));2*FILAS($B$4:$B5)-1)
recuerda validarla presionando Ctrl+Mayusc+Enter, en vez de solo Enter.

Esta formula la copiaremos al resto de celdas de las columnas que responde al concepto 'venta'.


Expliquemos algo más de esta fórmula.



Comprobamos el hecho que:
La empresa A ha comprado a B por 500
La empresa C ha comprado a B por 600
La empresa D ha comprado a B por 100
lo que provoca inmediatamente y en sentido contrario que:
La empresa B ha vendido a A por 500
La empresa B ha vendido a C por 600
La empresa B ha vendido a D por 100.

En nuestra fórmula empleamos la función DESREF que nos habilita un rango virtual que corresponde a la fila de valores correspondiente a la empresa que vende.
Por ejemplo, en la celda F4
DESREF($B$3;COINCIDIR(E$2;$B$4:$B$7;0);1;1;8)
se convierte en
{500\0\0\0\600\0\100\0}
al aplicar sobre esta matriz un condicional (no sería estrictamente necesario) para quedarnos con los valores de 'compra' tendríamos la siguiente matriz de valores:
{500\FALSO\0\FALSO\600\FALSO\100\FALSO}

Como solo queremos recuperar los valores que responden a las posiciones impares, para recuperarlos con la función INDICE añadiremos como argumento la serie de los impares:
2n-1
o en nuestro caso:
2*FILAS($B$4:$B5)-1


Como se comentaba más arriba, se podría optar por esta forma igualmente válida y algo más sencilla en la celda D5:
=INDICE(DESREF($B$3;COINCIDIR(C$2;$B$4:$B$7;0);1;1;8);2*FILAS($B$4:$B5)-1)
matricialmente ejecutada.

Pero he preferido quedarme con la fórmula descrita por ser más restrictiva y quedarnos únicamente con los valores que respondían a las compras...

No hay comentarios:

Publicar un comentario