Hola todos!!

Siento la demora en las actualizaciones del blog, el motivo de todo este tiempo sin publicar nada se debe básicamente a dos motivos:

Primero y más importante, en poco tiempo voy a ser papá y además de ser la mejor noticia de mi vida y sentirme afortunado y feliz, es algo que desde el minuto uno exige plena dedicación. Y en eso me encuentro últimamente.

Segundo, a nivel laboral he estado bastante ocupado con varios proyectos que no han dejado mucho tiempo para dedicárselo al blog.

Pero hoy estoy con tiempo suficiente como para centrarme y poder escribir algo que os resulte interesante y práctico. Hace unos mese realicé una explicación sencilla de cómo trabajar con la función «Buscarv» en excel, de hecho incluí varios post donde además la combinaba con otras funciones como «Coincidir», «Si» o «Eserror». En esta ocasión quiero hablar de la misma función pero no en su uso en la hoja de cálculo como función sino dentro del editor de visual basic.

Os propongo el siguiente ejemplo, imaginad que tenéis una tabla con una serie de personas, todas ellas unidas a un número como identificador único y con el detalle del último título que tiene y si sabe o no inglés, esta es la tabla:

BUSCARV EN VBA_1

A continuación os entregan otra tabla en la que únicamente aparece una columna con una serie de identificadores desordenados y donde algunos coincidirán o no con los de la primera tabla, y lo que debéis hacer es rellenar las tres columnas siguientes con «Nombre«, «Estudios» e «Inglés«.

BUSCARV EN VBA_2

Esto lo podéis hacer con una fórmula de forma manual o también en VBA con una macro que automatice el proceso: Esta es la macro que vamos a utilizar:

Sub BUSCARV()
'Seleccionamos la hoja listado y limpiamos las celdas que tengan contenido
Worksheets("LISTADO").Select
limpiardatos = Application.CountA(Worksheets("LISTADO").Range("a:a"))
Sheets("LISTADO").Range("C2:D" & limpiardatos).ClearContents
'Determinamos la longitud del rango de los datos con un contarA
fin = Application.CountA(Worksheets("LISTADO").Range("a:a"))
'Aplicamos la función buscarv para buscar el nombre y si no está que el resultado sea vacío, situamos el resultado en el rango B2 en adelante
With Worksheets("LISTADO").Range("B2:B" & fin)
.Formula = "=IF(ISERROR(VLOOKUP(RC[-1],DATOS!R2C1:R32C4,2,FALSE)),"""",VLOOKUP(RC[-1],DATOS!R2C1:R32C4,2,FALSE))"
.Formula = .Value
End With
'Aplicamos la función buscarv para buscar los estudios y si no están que el resultado sea vacío, situamos el resultado en el rango C2 en adelante
With Worksheets("LISTADO").Range("C2:C" & fin)
.Formula = "=IF(ISERROR(VLOOKUP(RC[-2],DATOS!R2C1:R32C4,3,FALSE)),"""",VLOOKUP(RC[-2],DATOS!R2C1:R32C4,3,FALSE))"
.Formula = .Value
End With
'Aplicamos la función buscarv para buscar si sabe o no inglés y si no está que el resultado sea vacío, situamos el resultado en el rango D2 en adelante
With Worksheets("LISTADO").Range("D2:D" & fin)
.Formula = "=IF(ISERROR(VLOOKUP(RC[-3],DATOS!R2C1:R32C4,4,FALSE)),"""",VLOOKUP(RC[-3],DATOS!R2C1:R32C4,4,FALSE))"
.Formula = .Value
End With
'Nombramos el encabezado de cada columna
With Worksheets("LISTADO")
.Range("B1") = ("NOMBRE")
.Range("C1") = ("ESTUDIOS")
.Range("D1") = ("INGLES")
End With
'Coloreamos el encabezado de cada columna (elijo el rojo)
With Worksheets("LISTADO")
.Range("B1").Interior.Color = vbRed
.Range("C1").Interior.Color = vbRed
.Range("D1").Interior.Color = vbRed
End With
End Sub

Como podéis ver no se trata de una macro excesivamente compleja, en verde comento para que sirve cada línea de código y simplemente tenéis que pegar en un nuevo módulo dentro de vuestro proyecto.

A continuación podéis colocar un botón en la hoja «Listado» para ejecutar la macro, de forma que el resultado os quedaría así:

BUSCARV EN VBA_3

Ahora podéis apreciar la potencia y rapidez de VBA para realizar el trabajo. Realmente es útil para casos estandarizados en los que temporalmente tengáis que actualizar la misma información una y otra vez.

Si todo va como espero, la semana que viene voy a escribir sobre la posibilidad de utilizar en Excel SQL de la misma forma que se utiliza en Access, estoy seguro que os encantará.

Y ahora, como siempre os dejo el archivo para podáis tener el ejemplo práctico.

Descarga el archivo de ejemplo pulsando en: BUSCARV EN VBA