viernes, 26 de agosto de 2016

Macros para buscar palabras en un texto


Contenidos

1 Macro para buscar palabras en un rango de celdas dado

2 Macro para buscar y resaltar palabras dentro de un texto

3 Macro para buscar en un texto una lista de palabras

Macro para buscar palabras en un rango de celdas dado

  • La macro cambia de color el fondo de la celda que contiene la palabra
  • La macro es sensible a las mayúsculas y minúsculas
  • Puede encontrar palabras completas o parte de una palabra
  • Utiliza el operador LIKE para localizar la palabra

Sub BuscarPalabras()
Dim Celda As Range
Dim palabra As String

    palabra = InputBox("Palabra a buscar")
    palabra = "*" & palabra & "*"
    
    For Each Celda In Selection

        If Celda.Value Like palabra Then
            Celda.Interior.ColorIndex = 36
        End If
        
    Next Celda
End Sub

En el siguiente ejemplo, se busca la palabra "José"

Excel buscar palabras operador LIKE 1

Resultado de la búsqueda.

Excel buscar palabras operador like 2

En el siguiente ejemplo, se busca la palabra "ez"

Excel buscar palabras operador like 3


Macro para buscar y resaltar palabras dentro de un texto

  • La macro cambia de color (rojo) la palabra encontrada dentro del texto
  • La macro es sensible a las mayúsculas y minúsculas
  • Puede encontrar palabras completas o parte de una palabra
  • Utiliza la función InStr para localizar la palabra

Sub ResaltarPalabras()
Dim Celda As Range
Dim palabra As String

    palabra = InputBox("Palabra a buscar")
    
    For Each Celda In Selection

        posicion = InStr(Celda.Value, palabra)
        
        If posicion > 0 Then
            Celda.Characters(posicion, Len(palabra)).Font.Color = vbRed
        End If
        
    Next Celda
End Sub

En el siguiente ejemplo, se buscó la palabra "José"

Excel buscar palabras función InStr
La siguiente macro resalta las diferentes ocurrencias de la palabra en el la misma celda.

Sub ResaltarPalabras2()
Dim Celda As Range
Dim palabra As String
Dim posicion As Integer

    palabra = InputBox("Palabra a buscar")
    
    For Each Celda In Selection
        posicion = InStr(1, Celda.Value, palabra)
        
        Do Until posicion = 0
            Celda.Characters(posicion, Len(palabra)).Font.Color = vbRed
            posicion = posicion + 1
            posicion = InStr(posicion, Celda.Value, palabra)
        Loop
        
    Next Celda

End Sub

En el ejemplo que sigue se buscó la palabra "amo"

Ejemplo macro Excel busca palabras en una celda


Macro para buscar en un texto una lista de palabras


La macro trabaja de la siguiente manera:
Solicita el rango donde se encuentra la lista de palabras a buscar (una palabra por cada renglón)
Solicita el rango de las celdas donde se encuentra el texto donde se buscan las palabras
Si encuentra la palabra en el renglón del texto, coloca la palabra encontrada en la columna a la 
derecha del renglón.  Limpia la celda de la derecha del texto en el caso de no encontrar la palabra

Sub buscarPalabras()
Dim palabra As Variant
Dim celda As Variant
Dim direccionCelda As String
Dim rangoPalabras As Range
Dim rangoTexto As Range
Dim contenidoCelda As String
Dim contenidopalabra As String

'Proporcionar el rango de la palabra a buscar
Set rangoPalabras = Application.InputBox(Prompt:="Seleccionar el rango de entrada de las palabras a buscar", _
        Title:="Rango palabras", Type:=8)

'Proporcionar el rango del texto
Set rangoTexto = Application.InputBox(Prompt:="Seleccionar el rango de entrada del texto donde se busca", _
        Title:="Rango texto", Type:=8)

'Buscar en cada celda del texto la palabra
For Each celda In rangoTexto
   
    'Buscar cáda palabra en la celda activa
    For Each palabra In rangoPalabras
        contenidoCelda = LCase(celda.Value)      'convertir a minúscula las celdas del texto
        contenidopalabra = LCase(palabra.Value)  'convertir a minúscula la palabra a buscar
        direccionCelda = celda.Address
       
        If contenidoCelda Like "*" & contenidopalabra & "*" Then
            Range(direccionCelda).Offset(0, 1) = contenidopalabra
            Exit For 'salir del ciclo cuando encuentre la palabra
        Else
           Range(direccionCelda).Offset(0, 1) = ""
        End If
    Next palabra
Next celda
End Sub

En el siguiente ejemplo, la lista de palabras a buscar se encuentra en la columna D. El rango del texto donde se busca la palabra se encuentra en la columna A.  Si se encuentra la palabra se escribe a la derecha de la celda donde se encontró, columna B.