FUNCION CONTAR.SI EN VBA

Hoy es el primer post que escribo después del nacimiento de mi hija Alicia, sin duda la mejor experiencia de mi vida!!. Han sido unos días muy intensos y felices y por fortuna todo ha salido muy bien.

Como comprenderéis no tengo demasiado tiempo últimamente, y ese el motivo de tardar tanto tiempo en publicar una actualización.

El tema de hoy es una consulta que me envían al blog sobre la función “Contar.Si” y la posibilidad de automatizarla en una hoja Excel mediante macros.

Me ha parecido un ejercicio interesante, sobre todo ver la forma en la que podemos introducir una fórmula en el código que vamos a utilizar. ¿Empezamos?

Como viene siendo habitual intentaré ilustrar el proceso con un ejemplo, que es la mejor forma de aprender. Imaginad que tenéis un listado en una columna con 199 nombres, (en el ejemplo he utilizado las bases de datos del INE en donde podéis encontrar, por ejemplo, los nombres más usados en los últimos nacimientos). Estos son los nombres:

FUNCION CONTAR.SI EN VBA

Y nos piden dos consultas:
– Contar las veces que se repiten cada uno de los nombres y colocar el resultado en la columna B.
– Contar las veces que se repiten unos nombres en particular, y colocar el resultado en la columna C.

Para la primera consulta utilizaremos la siguiente macro:

Sub ContarSi()
Dim i As Double
Dim final As Double
'Limpiamos los contenidos de la columna B
Worksheets("DATOS").Range("B2:B65000").Select
Selection.ClearContents
'Calculamos el rango de los datos en la columna A
Worksheets("DATOS").Select
final = Application.CountA(Worksheets("DATOS").Range("a:a"))
For i = 2 To final
'Contamos las veces que se repiten cada uno de los nombres en el rango seleccionado
Nombres = Worksheets("DATOS").Cells(i, 1).Value
Worksheets("DATOS").Cells(i, 2).Value = Application.CountIf(Worksheets("DATOS").Range("A1:A" & final), Nombres)
Next
End Sub

Como podéis apreciar, incluimos la función Contar.Si mediante la siguiente sentencia:

Application.CountIf(Worksheets("DATOS").Range("A1:A" & final), Nombres)

De esta forma hacemos referencia a la sintaxis del rango establecido en el que contaremos Range(“A1:A” & final) y el criterio que es “Nombres” y que es igual a Worksheets(“DATOS”).Cells(i, 1).Value

El resultado de la macro lo colocaremos en la segunda columna, quedando así la información:

FUNCION CONTAR.SI EN VBA_1

Para la segunda consulta utilizaremos la siguiente macro:

Sub ContarSiV()
Dim i As Double
Dim final As Double
'Limpiamos los contenidos de la columna C
Worksheets("DATOS").Range("C2:C65000").Select
Selection.ClearContents
'Calculamos el rango de los datos en la columna A
Worksheets("DATOS").Select
final = Application.CountA(Worksheets("DATOS").Range("a:a"))
For i = 2 To final
Nombres = Worksheets("DATOS").Cells(i, 1).Value
'Mediante una condición contamos las veces que se repiten los nombres elegidos
If Nombres = "IGNACIO" Or Nombres = "MARIA" Or Nombres = "TERESA" Then
Worksheets("DATOS").Cells(i, 3).Value = Application.CountIf(Worksheets("DATOS").Range("A1:A" & final), Nombres)
End If
Next
End Sub

En este caso estamos delimitando que la función solamente cuente aquellos nombres que hemos establecido en la condición (IGNACIO, MARIA Y TERESA), el resto quedan en blanco. El resultado es el siguiente:

FUNCION CONTAR.SI EN VBA_2

Para facilitar las pruebas os he colocado dos botones para ejecutar cada uno de los códigos por separado.

Este ejemplo también puede ser muy útil para introducir cualquier tipo de función, tan solo tendréis que adaptar la sintaxis a VBA, por ejemplo: sumar.si, sumaproducto, contar.si.conjunto … etc.

Espero que os haya resultado de utilidad y que lo podáis integrar con éxito en vuestros proyectos de VBA

Descarga el archivo de ejemplo pulsando en: FUNCION CONTAR.SI EN VBA

Anuncios

4 pensamientos en “FUNCION CONTAR.SI EN VBA

  1. Excelente aplicativo estimado……..Le comento se puede adaptar este aplicativo o se puede hacer uno que lo pueda utilizar en consulta de 2 hojas en Excel en el mismo libro y/o dos libros distintos. Gracias

    Me gusta

  2. Hola Jose;

    Pues sí que se puede hacer lo que comentas, puedes verlo en el ejemplo que he subido a Google Drive pinchado en el siguiente enlace:
    https://drive.google.com/folderview?id=0B2MZVcPxjhyPflgtNDB5aHVUSkxPVkd1QzZyME9TZmFKa2FscUJNWTMwVklpblFVcWZ4YTA&usp=sharing

    Encontrarás una carpeta con dos archivos, uno de ellos es FUNCION CONTAR.SI EN VBA contiene las macros y los ejemplos para ir a consultar a otra página dentro del archivo. El otro archivo es parte del ejemplo para que pruebes a contar en “OTRO_LIBRO”.

    Para contar en otro libro, la forma de hacerlo y que me parece la mejor, es traerte la información que quieres contar al archivo, en nuestro caso lo pegaríamos en la pestaña BASE2

    Para traer la información he usado una macro con SQL que copia la info de otro archivo. Lo único que debes hacer es poner en la macro denominada “contarsi_otro_libro()” la ruta en la que guardes el archivo “OTRO_LIBRO”, en la macro he dejado la ruta en mi PC: C:\Users\USUARIO\Documents\FUNCION CONTAR.SI EN VBA\OTRO_LIBRO.xls

    Si no modificas esta ruta en la macro, no funcionará y saltará un error.

    Para tu información, la macro para importar los datos de otro libro está en esta entrada: https://excelsignum.wordpress.com/2015/04/25/realizar-consulta-sql-desde-vba-en-excel-hacer-una-consulta-de-access-en-excel/

    Espero te sirvan de ayuda.

    Saludos.

    Me gusta

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s