Veamos hoy la aplicación de una fórmula de Excel empleada para localizar una condición determinada sobre rango de celdas.
Se trata de dar respuesta a una lectora del blog que planteaba la siguiente cuestión:
Se trata pués de descubrir una norma o patrón que sirva para identificar la posición en el rango dado que coincida con el primer valor diferente a cero con el que nos encontremos en la serie dada.
Veamos en la imagen la distribución de valores y la fórmula que responde a dicho patrón:
La fórmula en concreto es:
=SI(Y(SUMA($B$2:B2)<>0;SUMA($B$2:B2)=B2);B1;"")
que arrastramos hacia la derecha, hasta el final del rango dado. Fijémosnos en que el rango queda cerrado en forma relativa por la derecha, y absoluta (fija) por la izquierda; para que según arrastramos hacia la derecha, dicha referencia se mueva y vaya incluyendo los nuevos valores a la suma acumulada.
La condición que determina la primera posición, esto es, el primer valor diferente a cero, lo he construido como el primer acumulado diferente a cero y que, además, coincida con el valor inicial. En caso de cumplimiento la fórmula devuelve el día (o posición) de la coincidencia.
El resto es sencillo, ya que añado en la celda AG2 una suma del rango así obtenido, en base a ese condicional:
=SUMA(B3:AE3)
obteniendo el día concreto.
En este caso la idea fundamental para dar con la solcuión correcta es tener muy claro cuál y cómo debo contruir la condición.
Esta es una manera de llegar a un resultado correcto, sin embargo requiere de un rango auxiliar de cálculo. Existe al menos otra manera de conseguir lo mismo, sin emplear rangos auxiliares, utilizando una función personalizada en VBA.
Para ello, insertamos el siguiente código VBA en un módulo del Explorador de proyectos VBA:
Vemos en la siguiente imagen cómo el resultado de esta función es el mismo, evitando celdas auxiliares de cálculo. Aunque el proceso y condiciones son idénticas:
Se trata de dar respuesta a una lectora del blog que planteaba la siguiente cuestión:
...Trabajo con plantas, asi que tengo una hoja excel donde en una fila tengo: dia 1 dia 2 dia 3 dia 4 asi hasta 30 dias..... y abajo el numero de germinaciones de cada dia, me gustaria añadir una columna en la que me indicara en qué dia se produce la primera germinacion, por ejemplo: dia 1 2 3 4 5 6.........30 semillas germinan 0 0 0 2 2 4..........0 Lo que me gustaria es que en la columna me apareciera el dia 4 para saber cuantos dias tarda en germinar.... |
Se trata pués de descubrir una norma o patrón que sirva para identificar la posición en el rango dado que coincida con el primer valor diferente a cero con el que nos encontremos en la serie dada.
Veamos en la imagen la distribución de valores y la fórmula que responde a dicho patrón:
La fórmula en concreto es:
=SI(Y(SUMA($B$2:B2)<>0;SUMA($B$2:B2)=B2);B1;"")
que arrastramos hacia la derecha, hasta el final del rango dado. Fijémosnos en que el rango queda cerrado en forma relativa por la derecha, y absoluta (fija) por la izquierda; para que según arrastramos hacia la derecha, dicha referencia se mueva y vaya incluyendo los nuevos valores a la suma acumulada.
La condición que determina la primera posición, esto es, el primer valor diferente a cero, lo he construido como el primer acumulado diferente a cero y que, además, coincida con el valor inicial. En caso de cumplimiento la fórmula devuelve el día (o posición) de la coincidencia.
El resto es sencillo, ya que añado en la celda AG2 una suma del rango así obtenido, en base a ese condicional:
=SUMA(B3:AE3)
obteniendo el día concreto.
En este caso la idea fundamental para dar con la solcuión correcta es tener muy claro cuál y cómo debo contruir la condición.
Esta es una manera de llegar a un resultado correcto, sin embargo requiere de un rango auxiliar de cálculo. Existe al menos otra manera de conseguir lo mismo, sin emplear rangos auxiliares, utilizando una función personalizada en VBA.
Para ello, insertamos el siguiente código VBA en un módulo del Explorador de proyectos VBA:
Function germinacion(rng As Range) 'definimos constantes suma = 0 x = 0 'La función se actualizará cuando se efectúe un cálculo en alguna celda de la hoja 'en la que aparezca nuestra función. Application.Volatile 'recorremos el rango seleccionado For Each celda In rng 'acumulamos valores del rango suma = suma + celda.Value x = x + 1 'localizamos el punto en el que se dan las condiciones de primer día de germinados If celda.Value <> 0 And suma = celda.Value Then dia = x End If Next celda 'devolvemos el valor obtenido germinacion = dia End Function
Vemos en la siguiente imagen cómo el resultado de esta función es el mismo, evitando celdas auxiliares de cálculo. Aunque el proceso y condiciones son idénticas:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.