Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Vectores de Subtotales sobre rango dinámico

En un artículo de hace un par de semanas tuve la necesidad de verificar, para datos de una tabla y por cada registro, si se verificaban una serie de criterios (múltiples) leer aquí.
Descubrir si se cumplian esos ciertoso criterios fue relativamente simple empleando ciertos condicionales SI, con lo que se obtenía una matriz de 1 y 0.
Posteriormente tuve la necesidad de, a partir de dicha matriz de 1 y 0, simplificarla en un Vector de VERDADERO y FALSO, que sencillamente reconociera si existe en cada fila al menos un cumplimiento... o dicho de otro modo, si la suma de cada fila es mayor a cero.
Empezaremos con una matriz aleatoria dinámica de 0 y 1 (de dimensión 12 filas x 3 columnas).
=MATRIZALEAT(12;3;0;1;VERDADERO)

Cada columna simula el cumplimiento (=1) o no (=0) de los tres supuesto criterios existentes...

Nuestro primer paso es obtener el vector vertical para cada fila que sume las tres columnas de cada registro...
Entonces en F2 escribimos:
=MMULT(B2#;SECUENCIA(COLUMNAS(B2#);1;1;0))
donde multiplicamos dos matrices, una de (12 x 3) y otra de (3 x 1), lo que obviamente devolverá como resultado un vector de dimensión (12 filas x 1 columna).
Recuerda la regla matemática del producto de matrices:
A(m x n) x B(n x z) = C(m x z)
En nuestro caso nos hemos apoyado en la función SECUENCIA para montar una matriz de unos con dimensión (3x1) = {1;1;1} como necesitábamos...

Lo que vemos es un vector vertical que suma fila por fila los tres elementos de la matriz principal.
Si no tuvieras disponible la función SECUENCIA podrías replicarla matricialmente de la siguiente manera:
=MMULT(B2#;FILA(INDIRECTO("1:"&COLUMNAS(B2#)))^0)

En cualquiera de las dos formas, en un paso posterior, habría que convertirlo en prueba lógica, comparando con '>0' para obtener VERDADEROS y FALSOS, y así poder operar con el vector más facilmente.
=MMULT(B2#;SECUENCIA(COLUMNAS(B2#);1;1;0))>0


Adicionalmente, sin utilidad para el caso planteado (pero sí para otros), mostraré como lograr el vector horizontal de suma por columnas.
En este caso necesitaremos generar un vector de unos, de dimensión 1 fila x 12 columnas, de tal forma que el producto de matrices quede: (1x12) x (12x3) = (1x3).

Para ello podemos escribir en B15:
=MMULT(SECUENCIA(1;FILAS(B2#);1;0);B2#)
o, matricialmente, para otras versiones de Excel:
=MMULT(TRANSPONER(FILA(INDIRECTO("1:"&FILAS(B2#))))^0;B2#)


Fórmulas muy potentes por si mismas para obtener esos parciales por filas y/o columnas, pero también como vectores auxiliares de apoyo para construir fórmulas más elaboradas...


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

Vectores de Subtotales sobre rango dinámico

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×