BUSCAR CON VARIOS CRITERIOS EN VBA

Una de las principales tareas que usamos diariamente en Excel es buscar datos, lo hacemos constantemente con funciones como Buscar, Buscarv, Coinicidir, etc. Pero en la mayor parte de los casos lo que buscamos es un valor concreto de una tabla, dependiendo de los criterios que consideremos oportunos.

En este sentido, la función BuscarV o BuscarH, cuando hablamos de varios criterios, solo podemos realizar la búsqueda si nos apoyamos en columnas auxiliares y concatenando datos para conseguir una clave principal (valor buscado) que debe ser exactamente igual al mismo valor en la matriz de búsqueda. Se puede combinar con otras funciones como Coincidir o Encontrar (etc) de manera que podamos incluir un segundo criterio de búsqueda o realizar combinaciones con funciones matriciales complejas.

Ante estas limitaciones, podemos recurrir a VBA para generar un código que realice búsquedas con los criterios que necesitemos y que además podamos modificar fácilmente y adaptar a nuestras bases de datos.

Para realizar el ejemplo de hoy, voy a utilizar una base de datos bastante interesante en que constan los datos de matriculación de vehículos en lo que llevamos de año. Esta información está disponible en la web de la Dirección General de Tráfico.

La información del fichero es la siguiente, Marca del vehículo, Carburante y Comunidad Autónoma de Residencia. (se puede extraer más información, pero para este ejemplo, me ha parecido la más relevante), aquí está la tabla:

BUSCAR CON VARIOS CRITERIOS EN VBA

Estos datos los tenemos en una hoja denominada “TABLABASE” y en otra hoja que vamos a denominar “DATOS” vamos incluir algunos vehículos (Marca, Combustible y en la Comunidad Autónoma de Madrid) de los que nos interesa buscar el número de matriculaciones:

BUSCAR CON VARIOS CRITERIOS EN VBA1

Ahora podemos utilizar la siguiente macro para realizar la búsqueda de los valores que necesitamos:

Sub BUSCAR()
Dim i As Double
Dim j As Double
Dim Marca, Carburante, Comunidad As String
'Descativamos actualizacion de pantalla
Application.ScreenUpdating = False
'Refrescamos la columna de total por cada búsqueda que hagamos
With Worksheets("DATOS")
Total = Application.CountA(.Range("D:D"))
If Total > 1 Then .Range("D2:D" & Total).ClearContents
End With
'Definimos rango de tablabase
fin = Application.CountA(Worksheets("TABLABASE").Range("A:A"))
'Definimos rango de datos
Final = Application.CountA(Worksheets("DATOS").Range("A:A"))
With Worksheets("TABLABASE")
'Iniciamos el bucle principal en tabla Datos
For i = 2 To Final
'Definimos cada uno de los Items por los que vamos a buscar
Marca = Sheets("DATOS").Cells(i, 1)
Carburante = Sheets("DATOS").Cells(i, 2)
Comunidad = Sheets("DATOS").Cells(i, 3)
'Segundo bucle en tablabase por cada item del primer bucle
For j = 2 To fin
'Buscamos con un condicional en tablabase cada una de las variables definidas
If Marca = .Cells(j, 1) And _
Carburante = .Cells(j, 2) And _
Comunidad = .Cells(j, 3) Then
'Si encontramos coincidencia, igualamos celdas con el valor de la columna 4
Sheets("DATOS").Cells(i, 4) = .Cells(j, 4)
Exit For
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub

En resumidas cuentas, lo que hace esta macro es que por cada fila de DATOS busca coincidencias a lo largo de todas las filas de TABLABASE, y si las encuentra, incluye el valor total y sale del bucle para continuar con la siguiente fila, el resultado es exactamente el dato que buscábamos:

BUSCAR CON VARIOS CRITERIOS EN VBA2

Normalmente las búsquedas que realizo en vba las hago con este método, puede parece complejo, pero si os detenéis un poco en el análisis del código veréis que simplemente se trata de hallar correspondencias entre combinaciones de datos.

Por cierto, muy interesante la información que se puede obtener con esta base de datos 🙂

Descarga el archivo de ejemplo pulsando en: BUSCAR CON VARIOS CRITERIOS EN VBA

 

Anuncios

Un pensamiento en “BUSCAR CON VARIOS CRITERIOS EN VBA

  1. Pingback: AGREGAR INFORMACIÓN DEL PROCESO REALIZADO EN LA EJECUCIÓN DE UNA MACRO O UN PROGRAMA EN VBA | EXCEL SIGNUM

¿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