miércoles, 7 de noviembre de 2012

Fórmula para localizar un punto de un rango de Excel.

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:

...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:

Fórmula para localizar un punto de un rango de Excel.

No hay comentarios:

Publicar un comentario en la entrada