Las búsquedas en excel son algo muy cotidiano, pero no siempre es sencillo, imagina tener que buscar una cadena de texto especifica dentro de una enorme plantilla contable en excel y que ademas podría estar contenida dentro de mas texto, así que ahora te mostrare una macro para buscar texto dentro de otro texto, parece complicado, pero ya veras que no lo es tanto.
Aunque existen funciones de excel que te pueden decir si una cadena de texto esta contenida dentro de otra ( ENCONTRAR , HALLAR ), estas tienen la limitante que solo aplican a un texto en especifico, que pasa si deseas hacer la búsqueda en muchas cadenas de texto que están en diferentes celdas.?
Esto se puede resolver fácilmente con una macro, usaremos una función de VBA que hace lo mismo que ( ENCONTRAR Y HALLAR ) pero a su vez se ejecutara esta función mediante un ciclo que recorrerá cierta cantidad de filas.
Macro para encontrar texto en otro
Option Explicit
Sub BuscaTexto()
Dim r As Range
Dim tx As String
Dim uFila As Long
uFila = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
tx = InputBox("Ingresar el texto a buscar")
If tx <> "" Then
For Each r In Range(ActiveCell.Address, Cells(uFila, ActiveCell.Column))
If InStr(1, ActiveCell.Value, tx) > 0 Then
ActiveCell.Interior.Color = 65535
End If
Selection.Offset(1).Select
Next r
End If
End Sub
Explicando el código
Como puedes ver, el código es muy corto, pero tiene un enorme potencial, así que lo explicare.
Obtener la ultima fila con datos
uFila = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
Con esta linea se obtiene la ultima fila que contiene algún dato, esto tomando como referencia la celda que se ha seleccionado.
Obtener el texto que se desea buscar.
tx = InputBox("Ingresar el texto a buscar")
Con esta linea metemos en la variable tx la cadena que teclearemos en una caja de texto.
Ciclo para recorrer las celdas y buscar el texto en cada posicion
For Each r In Range(ActiveCell.Address, Cells(uFila, ActiveCell.Column))
If InStr(1, ActiveCell.Value, tx) > 0 Then
ActiveCell.Interior.Color = 65535
End If
Selection.Offset(1).Select
Next r
Ese es un ciclo que recorre todas las celdas con datos y verifica en cada posición si la celda activa contiene el texto buscado, no importa si hay mas texto, es decir, el texto buscado podría estar envuelto en mas texto, pero si esta, la función nos dice a partir de que carácter se encuentra.
La condicion que determina si el texto esta contenido en la cadena
If InStr(1, ActiveCell.Value, tx) > 0 Then
ActiveCell.Interior.Color = 65535
End If
Con esa sección de código se determina si el texto esta contenido en el texto de cada celda, si lo encuentra, pintara con un fondo amarillo la celda activa.
Para que puede servir esta macro.
Obviamente hay muchas cosas en las que se puede aplicar, te doy una idea ( se puede usar para conciliaciones )
Nahum Duron dice
Excelente tutorial
Que debo hacer si lo que quiero es eliminar la fila donde esta esa palabra
juan dice
hola,
quisiera un macro o una funcion asi, en la columna A tengo nombre de productos, el macro o la fucion tendria que buscarme que si contiene “sopas” que me diga que este pertenece a comida o es de la fabrica tal.
Será posible?
Cesar V dice
Hola, pudiste hacerlo?
Gerardo Lopez dice
Hola que tal, he tratado de hacer busqueda con el operado like o con InStr y no me funciona, que puede ser? gracias por su colaboracion
esegovia dice
Muchas gracias, excelente artículo.
Ma. Luisa dice
Muchas gracias!!
Ignacio de Jesús dice
Hola, acabo de llegar a este blog y es muy bueno.
Donde voy para empezar a conocer como hacer macros?
Saludos
Nolberto Lopez dice
Puede usar el buscador en la pagina o ir a la categoría de macros.
https://formulasexcel.com/category/macros/
Henrry L. dice
Saludos, excelente macro para muchas soluciones de busqueda.
Gracias por el aporte.