BUSCAR VALORES CON EL MÉTODO RANGE.FIND EN EXCEL CON VBA

Hola a todos!.

¿Qué tal todo?, ¡espero que bien!.

Hoy voy a escribir acerca de un método interesante para buscar datos en Excel. Se trata del método range.find, que en comparación con otras funciones, se presenta mucho más rápido que un loop y ofrece mayor versatilidad que el uso de fórmulas.

Su uso es muy sencillo y ofrece unos resultados muy interesantes. Imaginad que tenemos en una hoja una dispersión de nombres de personas por diferentes celdas:

BUSCAR VALORES CON EL METODO RANGE.FIND EN EXCEL CON VBA

y estamos realizando una programación para obtener la localización del nombre que hemos seleccionado. Lo primero que se nos puede ocurrir es plantear un loop que recorra todas las celdas y vaya seleccionando el nombre que hemos elegido, sin embargo esto ocasionaría que nuestro código fuese demasiado lento (y sobre todo si ampliamos el tamaño del área que contiene la información).

La solución optima sería el uso del método range.find y que vamos a usar en el siguiente código:

Sub ENCONTRAR_DATO()
'Declaramos variables
Dim Dato As Range, cDato As String, nDato As String
Dim sLoc As String, nombre As String
With Sheets("DATOS").Cells
Sheets("RESULTADO").Cells(3, 2).ClearContents
'En la celda B2 indicamos el nombre a buscar
nombre = Sheets("RESULTADO").Cells(2, 1).Value
'Si el nombre está vacío salimos del proceso
If nombre = vbNullString Then Exit Sub
'Buscamos nombre (cualquier palabra o texto que lo contenga)
Set Dato = .Cells.Find(What:=nombre, lookat:=xlWhole)
'Si el nombre no existe, controlamos el error
On Error Resume Next
cDato = Dato.Address
On Error GoTo 0
'Si existe nombre entonces iniciamos un loop
If Not Dato Is Nothing Then
Do
'Que busca todas las coincidencias
Set Dato = .FindNext(Dato)
'En una cadena de texto grabamos la localización
'de las coincidencias
nDato = Dato.Address
sLoc = sLoc & " " & nDato
'Cuando la cDato sea igual a nDato
'salimos del loop
Loop Until cDato = nDato
End If
'pasamos los datos a celda B3
Sheets("RESULTADO").Cells(3, 1) = sLoc
End With
End Sub

Este código lo pegamos en un módulo estándar de nuestro editor VBA y en la hoja RESULTADO incluimos un botón de comando. El nombre a buscar lo escribimos en la celda A2 y ejecutamos la macro pulsando el botón.

En este caso, buscamos todos los nombres que se correspondan con “RAQUEL”, obteniendo el siguiente resultado:

BUSCAR VALORES CON EL METODO RANGE.FIND EN EXCEL CON VBA2

Es decir que existen dos resultados, ambos en las celdas J15 Y A14 respectivamente.

He dejado el dólar en el resultado, pero lo podéis eliminar usando un replace: replace(sloc,"$","")

Si comprobamos en la hoja DATOS podemos ver que el resultado es correcto:

BUSCAR VALORES CON EL METODO RANGE.FIND EN EXCEL CON VBA3.jpg

Y esto ha sido todo. Como podéis observar, se trata de un código sencillo y muy útil como alternativa al uso de loops que recorren grandes rangos.

Espero que os haya resultado de interés y os pueda ser de utilidad.

Descarga el archivo de ejemplo pulsando en:  BUSCAR VALORES CON EL MÉTODO RANGE.FIND EN EXCEL CON VBA

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Anuncios

¿Te ha gustado?, Realiza 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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s