Existe alguma maneira fácil de procurar por uma palavra específica dentro de uma célula?

2

Por razões que não são necessárias para adicionar aqui, eu tenho uma planilha do Excel 2007 que contém texto em várias células. O texto nessas células varia de menos de 100 palavras a quase 500 em alguns casos. De vez em quando, preciso encontrar uma palavra dentro de algumas dessas células.

Anteriormente, eu estava apenas examinando a célula com os olhos depois de usar o recurso de pesquisa do Excel para restringir quais células continham a palavra. Ao fazer isso, cheguei a pensar se poderia haver uma maneira mais eficiente de fazer isso. Eu também comecei a me perguntar quanto mais tedioso e propenso a erros este método poderia ser se eu estivesse trabalhando com células que continham ainda mais texto. Existe alguma maneira fácil de realizar uma pesquisa dentro de uma célula, em outras palavras, sem recorrer a alguma fórmula complicada ou ao uso de VBA?

Concedido, eu poderia simplesmente copiar e colar o texto em um documento do Word e identificar a palavra através de CTRL + F no Word, mas existe uma maneira fácil de simplesmente procurar e identificar uma palavra específica dentro de uma célula no Excel? Eu colei um visual disso para você abaixo:


Nacélulaquevocêvêacima,eudestaqueiapalavra"dispuestos" depois de examinar esta célula com meu olho. Existe uma maneira de fazer facilmente o mesmo usando um recurso de pesquisa do Excel? Por exemplo, em uma tabela do Word, sei que usar a tecla tab pode me levar de uma célula para outra, mas se eu quiser tabular dentro de uma célula, simplesmente pressiono CTRL + TAB. Existe algum tipo de técnica semelhante que eu possa usar para pesquisar em uma célula do Excel? Há algo que preciso alterar nas opções do Excel para que isso aconteça?

    
por Lisa Beck 30.09.2016 / 21:47

1 resposta

2

Estou pensando que a única maneira é VBA, então eu quebrei as regras para escrever uma macro (... desculpe) para você, que pode conseguir isso rapidamente. Ele colorirá todas as ocorrências do termo de pesquisa laranja e informará quantas ocorrências ele encontrará. Você poderia criar um atalho para ele como CTRL + SHIFT + F (como um CTRL + F especial).

Aliás, funciona da mesma forma que CTRL + F no que diz respeito às seleções. Ou seja, se apenas uma célula for selecionada, ela pesquisará a planilha inteira ... mas, se um intervalo de células for selecionado, ela apenas verificará esse intervalo específico, assim como a função regular Localizar.

Veja um exemplo de resultado:

EaquiestáoVBA:

SubfindPaintString()DimvaluesAsRangeDimLastRowAsLong,LastColAsIntegermyName="Find+Paint String"

    'We'll work like the normal Find/Replace function which looks at the selected range...
    Set values = Selection

    '...if the selected range is one cell then we look at the entire worksheet (within the used range):
    If values.Cells.Count = 1 Then
        LastRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
        LastCol = Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
        Set values = Range(Cells(1, 1), Cells(LastRow, LastCol))
    End If

    'Set a suggested/default search query if you repeatedly search the same word:
    strSearch = ""

    'Get the string to paint:
    theString = CStr(InputBox("Enter the string you want to paint" & vbNewLine & "(not case sensitive):", myName, strSearch))
    If theString = "" Then Exit Sub

    'Set the colour to paint occurrences:
    theColour = 1137094

    'Make a log of occurrences:
    foundLog = 0

    'Work through each cell in range, searching for the string and painting it:
    For Each cell In values
        'Check if our string is somewhere in the cell - if not then ignore it:
        If InStr(LCase(cell.Value), LCase(theString)) Then
            matchLog = 0 'match success log (increments by 1 per character)
            j = 1 ' string character selector
            For i = 1 To cell.Characters.Count
                If LCase(Mid(cell.Value, i, 1)) = LCase(Mid(theString, j, 1)) Then
                    matchLog = matchLog + 1 '+1 to matchlog
                    j = j + 1 '+1 to string character selector
                    If matchLog = Len(theString) Then
                        'we have found the full word, so paint it:
                        cell.Characters(i - Len(theString) + 1, Len(theString)).Font.Color = theColour
                        j = 1 'reset string character ready for next use
                        matchLog = 0 'reset matchLog ready for next use
                        foundLog = foundLog + 1
                    End If
                Else
                    'reset matchLog and string character selector:
                    matchLog = 0
                    j = 1

                    'see if this cell character (which didn't match the string character that we
                    'got up to) matches the first string character:
                    If LCase(Mid(cell.Value, i, 1)) = LCase(Mid(theString, j, 1)) Then
                        matchLog = matchLog + 1
                        j = j + 1
                    End If
                End If
            Next i
        End If 'in string
    Next cell

    'Tidy data for message box:
    If Len(theString) > 20 Then theString = Left(theString, 16) & "..."
    If foundLog = 0 Then
        foundLog = "0"
        theS = "s"
    ElseIf foundLog = 1 Then
        theS = ""
    Else
        theS = "s"
    End If
    MsgBox "Found " & foundLog & " occurrence" & theS & " of '" & theString & "'.", vbOKOnly, myName
End Sub

É case em sensível. Para diferenciar maiúsculas de minúsculas, remova as quatro instâncias de LCase() .

Se você pesquisar frequentemente a mesma sequência, altere a linha strSearch = "" line para [por exemplo] strSearch = "apples" . Você ainda pode sobrescrevê-lo quando o lançar.

    
por 02.10.2016 / 00:25