Post Destacado

¿Buscas trabajo y no has certificado en Excel? 🤔

Hoy quiero hablarte sobre un tema que puede cambiar tu vida profesional: la certificación oficial de Excel MO-200. Puede que te estés preguntando, ¿por qué debería importarme obtener esta certificación? Pues, sigue leyendo y descubrirás las ventajas que puede ofrecerte. ¿Qué es la Certificación MO-200? La certificación MO-200, también conocida como "Microsoft Office Specialist: Excel Associate (Excel and Excel 2019)", es una credencial oficial otorgada por Microsoft . Este examen valida tus habilidades en Excel, asegurando que eres capaz de manejar eficientemente una amplia gama de tareas dentro de esta poderosa herramienta. Básicamente, todo el mundo agrega en sus CV la frase " Dominio de Excel ", pero casi nadie se preocupa por demostrarlo oficialmente. Esta es tu oportunidad para ser el candidato preferido en tu próxima búsqueda. ¿Por Qué Deberías Considerarla? 1. Mejora tu Currículum:    Tener una certificación oficial en tu currículum te diferencia de otros can...

Búsquedas Avanzadas en VBA con Find

 

No es infrecuente que debamos realizar búsquedas en Excel. De hecho, la estructura de tablas y rangos de celdas resulta sumamente conveniente para encontrar y vincular información entre un valor consultado y otro relacionado. Si estás acostumbrado/a a realizar búsquedas en Excel, a la hora de automatizar una tarea en VBA, puede que te sientas inclinado/a a utilizar estas mismas funciones en el código (tales como BUSCARV, INDICE, COINCIDIR, etc.). Sin embargo, la potencia y flexibilidad que te proporciona redactar tu propio código, también pone a disposición nuevas herramientas para que no te limites por lo conocido. Estamos hablando de la función Find (Buscar), que a su vez deriva de la herramienta de Búsqueda disponible en Excel.

Dicha función agrega potencia a nuestras búsquedas dado que nos permite parametrizarlas a nuestra medida, a la vez que facilita la gestión de aquellos casos en los que la búsqueda no arroja ningún resultado, mismos que con las funciones tradicionales obtendríamos un error que detendría nuestro código.

Hay muchas razones para conocer e implementar Find, de modo que pongamos manos a la obra para dominarla y ganar eficiencia en el código.

Buscar en Excel

Como dijimos, la función Find en VBA deriva de las opciones de búsqueda ya disponibles en Excel a través de la ventana de Búsqueda (Inicio > Buscar y seleccionar)



Si conoces la ventana anterior, sabrás que tiene distintas opciones que podríamos utilizar para realizar las búsquedas, mismas que estarán disponibles en la función Find de VBA.

La función Find en VBA

Primero, revisemos los aspectos técnicos:
  • Find pertenece a objetos de tipo Range, por lo que podemos definirlo como un método de rangos de celdas. Esto significa que sobre un rango definido, podremos aplicar la función Find, para realizar una búsqueda en dicho rango.
    • Range("A1:A100").Find "Escuela Directa" -> Buscará el término "Escuela Directa sobre el rango que va de A1 hasta A100.
  • El valor devuelto por Find:
    • De encontrar una coincidencia, devolverá otro objeto tipo Rango, permitiéndonos acceder a todas sus propiedades, tales como ubicación, fila, columna, y desde luego, valor (entre otros)
    • Si no se halla coincidencia, devolverá una objeto tipo Nothing (¡en lugar de un error!)
  • Su sintaxis tiene la siguiente forma:
Range.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

o en español:

Rango.Find (Que, Después de, Buscar en, Buscar por, Orden de búsqueda, Dirección de búsqueda, Coincidir mayúsculas y minúsculas, Doble Byte, Búsqueda por formato)

Como vemos, tenemos gran cantidad de parámetros de búsqueda que podemos configurar. No te dejes abrumar: salvo el primero, los demás son opcionales, e iremos de a poco entendiendo la lógica detrás de cada uno de ellos. Ante todo, debemos entender primero...

Cómo realizar una búsqueda simple con Find

Tomando los ingredientes anteriores (rango de búsqueda, valor buscado, rango devuelto), estamos en condiciones de plantear nuestra primera función Find.

Consideremos el siguiente rango sencillo de celdas:


En el mismo, nos proponemos hallar el valor "Excel". De modo que ya podremos comenzar a armar la búsqueda:
  1. Rango de búsqueda: A1:A5
  2. Valor buscado: "Excel"
  3. Valor devuelto: necesitaremos almacenarlo en una variable para acceder al mismo (la llamaremos Encontrado)
Por lo cual, en código VBA, resultará del siguiente modo:

Dim Encontrado as Range

Set Encontrado = Range("A1:A5").Find("Excel")

Una vez ejecutado, Encontrado almacenará el rango A3, dado que es donde se produce la coincidencia. Por ejemplo, podríamos acceder a la ubicación de la celda de resultado (Address) utilizando un MsgBox:

Dim Encontrado as Range

Set Encontrado = Range("A1:A5").Find("Excel")

MsgBox Encontrado.Address

Y se mostrará el siguiente mensaje en pantalla:



Demostrando que efectivamente hemos hallado la celda que estábamos buscando. Fantástico, pero tal vez por el momento de poca utilidad...

Utilizar Find como reemplazo de BuscarV

Evolucionemos nuestro ejemplo anterior para implementarlo en una situación más real, donde necesitaremos obtener un valor resultado a partir de un valor buscado. Por ejemplo, en el siguiente caso buscaremos "Excel" para que devuelva el valor de la columna B (tipo de documento):


En este caso, el procedimiento para hallar la coincidencia no se modificará, pero sí nuestra estrategia para obtener el valor resultado: lo que sabemos, es que una vez que hallemos "Excel" en la columna A, necesitaremos devolver el valor que se encuentra en la misma fila y en la columna B. Por tal motivo, podremos acceder a la fila del rango Encontrado, y con ella construir una referencia a columna B + fila Encontrado (Row).

Veamos cómo:

Dim Encontrado as Range
Dim ValorDevuelto as String

Set Encontrado = Range("A1:A5").Find("Excel")

ValorDevuelto = Cells(Encontrado.Row, 2)

MsgBox ValorDevuelto

Y se mostrará el siguiente mensaje en pantalla:


¡Correcto!

Por supuesto, en la práctica no nos limitaremos a mostrar los resultados en mensajes, sino que podremos usar los valores resultado para continuar avanzando con el código.

En nuestro próximo artículo, veremos cómo se gestionan los casos que Find no arroja ningún resultado, y exploraremos más de cerca los argumentos opcionales de Find. Nos vemos!