sábado 10 de abril de 2010

Ejemplo de un macro con For Each

La función CONTAR.SI permite contar cuantas celdas en un rango cumplen con un criterio determinado.

Pero si deseamos evaluar más de un criterio, por ejemplo contar las celdas con valores desde 5 hasta 10 incluyendo ambos, entonces la función contar.si ya no es suficiente, no obstante, podemos escribir una fórmula que anide la función contar con la función SI, o algo por el estilo.

Desde la versión 2007 de Excel se incorpora la función CONTAR.SI.CONJUNTO, lo cual nos facilita la situación planteada.

Sin embargo, en la presente entrada publicaremos un pequeño ejemplo que nos permitirá:



1. Ver como funciona la instrucción Each.
2. Cómo insertar una fórmula que no existe en Excel.
3. Resolver la situación de contar las celdas cuyos valores se encuentren entre dos valores.



Pasos para crear la función:

1) Entramos en el Editor de Visual Basic, preferiblemente en el libro personal de macros, de esta manera la función se encontrará disponible en cualquier archivo de Excel con que trabajemos.



2) Seleccionamos un módulo o insertamos uno nuevo



3) Luego en el AREA GENERAL del módulo, escribiremos el siguiente código:

Function CONTARENTRE(RANGO As Range, DESDE As Double, HASTA As Double)
     s = 0
     For Each cell In RANGO.Cells
         If cell >= DESDE And cell <= HASTA Then
             s = s + 1
         End If
     Next cell
     CONTARENTRE = s
End Function



La primera línea le dice a Excel, que se trata de una función que estamos llamando CONTARENTRE, la cual trabajará con tres parámetros los cuales hemos llamado: RANGO, DESDE y HASTA.



Luego en la segunda línea hemos utilizado una variable, la cual llamaremos s, cuyo valor inicial es cero. Esta variable acumula la cuenta en el rango seleccionado por el usuario, siempre que se cumpla el criterio.

En la tercera línea comienza un bucle FOR EACH, el cual consiste en repetir las líneas de código 4, 5 y 6, para cada celda que contenga el rango. Es decir, si el usuario selecciona un rango con 20 celdas, entonces el bucle se repetirá 20 veces. Tantas veces como celdas tenga el rango.



En la cuarta línea de código se evalúa la condición. La misma consiste en determinar si el valor en esa celda se encuentra entre los parámetros DESDE y HASTA indicados por el usuario, y en caso afirmativo, va para la línea seguiente de código, de lo contrario, evalúa la siguiente celda según el bucle FOR EACH.

La quinta línea de código solo se activa cuando una celda cumple el criterio de estar entre el valor DESDE y el HASTA. Con esta instrucción se va acumulando el número de veces que se cumpla la condición. Recordemos que el valor inicial de s es cero, de esta forma garantizamos que el contador coincida con la cantidad de veces que se cumpla el criterio. Cada vez que se cumple el criterio el valor de s aumenta en uno.



Una vez finalizado el recorrido de las celdas, entonces, el valor que acumulamos en la variable s, se la asignamos a la función que hemos programado.



La velocidad de esta función dependerá de la capacidad instalada en el PC así como de la cantidad de celdas contenidas en el rango a evaluar. La solución presentada aquí no necesariamente es la más optima, sin embargo nos permitió mostrarles un ejemplo para utilizar el bucle FOR EACH. Este bucle se repite por cada objeto en una colección, es decir, también podemos utilizar FOR EACH con otros objetos como formularios, hojas, elementos de una matriz, etc.



Esperamos le sea útil esta información, y por favor continúe visitando nuestro Blog.
Saludos

0 comentarios:

Publicar un comentario en la entrada