por xpelos » 01 May 2011 16:58
De acuerdo, Tony08.
Una parte de la solución -si es que la hay- consiste en que el usuario pueda replicarla cuando convenga, y eso se consigue entendiendo qué hace la fórmula. Y no es muy sencillo.
En la celda [G6] tenemos: 18/04/2011, que es donde la fórmula irá a comparar los valores del día que tenemos que comprobar, y en [F3] el dato horario a comparar. Estos son los valores que pedimos compare y que nos traiga el total de ventas que corresponda.
Vamos por partes, analizando esa fórmula:
=SUMAPRODUCTO(--(HORA($B$5:$B$192)=F3);--(DIA($B$5:$B$192)=DIA($G$6));$C$5:$C$192)
1.- SUMAPRODUCTO(). Es una función que multiplica los valores de las filas de una matriz y suma sus resultados. Esto es importante: una matriz tiene una estructura de filas y columnas, así que, a lo largo de la fórmula que construyas, verifica que las 'matrices' (en este caso $B$5:$B$192 y $C$5:$C$192) tengan la misma 'estructura' (=longitud: de 5 a 192)
2.- Sumaproduto() tiene la capacidad de operar con datos de una matriz (filas con filas, columnas con columnas), y no opera directamente con filas y columnas, si no tienen la misma 'longitud'.
3.- Cuando incluímos
=SUMAPRODUCTO(--(HORA($B$5:$B$192)=F3);--(DIA($B$5:$B$192)=DIA($G$6))...
introducimos dos condiciones: HORA($B$5:$B$192)=F3 y DIA($B$5:$B$192)=DIA($G$6).
en la secuencia ...));$C$5:$C$192) tenemos los datos que nos interesa localizar.
Veamos cómo:
3.1.- Cuando Excel encuentra que la HORA() coincide con la de [F3], entonces, encuentra que la condición es 'VERDADERO', y 'FALSO' en caso contrario. (La hora no coincide)
3.2.- Cuando Excel encuentra que el DIA() coincide con el de [G6], entonces, encuentra que la condición es 'VERDADERO', y 'FALSO' en caso contrario (El día no coincide).
3.3.- Excel no opera numéricamente con 'VERDADERO' y 'FALSO', así que, el doble operador '--' (doble resta), obliga a Excel a 'traducir' VERDADERO=1 y FALSO=0. De esta forma, si se cumplen las dos condiciones, tenemos una operación en que 1x1=1, mientras que en caso de que una condición -o las dos- no se cumplan, tendríamos: 0x0=0, 0x1=0 y 1x0=0. Si no se cumple alguna condición, el resultado siempre será '0' (cero).
Entonces, cuando incluímos la última 'columna' de la matriz: ... ));$C$5:$C$192) -que, en definitiva, es el dato del que queremos saber el total en caso de que las dos condiciones de 'Hora' y 'día' sean las solicitadas- el dato que corresponde a las filas de 'ventas' queda multiplicado por '0' o '1', con lo que la suma final sólo sumará los valores en que coincida hora y día.
Tómate tu tiempo para 'digerir' el tema y, si necesitas alguna aclaración más, lo preguntas de nuevo.
Lo que está claro es que tenemos una serie de condiciones y un resultado cuyo total necesitamos conocer, siempre que se cumplan las condiciones. Entonces, la estructura es:
=SUMAPRODUCTO(--(Condición1);--(Condición2);...;--(Condiciónn);(DATOS a totalizar))
Cuando 'lo pilles', lo mejor es que hagas tus 'pinitos' sobre matrices cortas (10-12 filas), donde pueda haber dos o más condiciones, y un total a averiguar, donde se cumplan esas condiciones.
Un saludo.