VBA – Localizar dados em várias planilhas no Excel

busca-blog[1]

O recurso Localizar do Excel (mais conhecido com Ctrl+L entre os veteranos da versão PT-BR) é um dos itens desse poderoso canivete suíço que é a ferramenta.

O inconveniente é que não temos tão facilmente o recurso funcionando da mesma forma pelo VBA. Mesmo que gravemos uma macro utilizando o recurso Localizar, caso a executemos sem que haja um resultado válido para a busca, ele retorna em erro. O motivo é que, no final da macro gravada termina com um .Select, pois a célula com o resultado da busca é ativada quando esta se encerra. Portanto, sem resultado, o erro persiste.

A macro abaixo faz o mesmo papel do busca, porém, prevendo o mau comportamento da macro gravada. Além disso, caso encontre um resultado, ela oferece a continuidade da busca:

Sub Procura()
    'Declara uma strign que vai receber o valor a ser procurado na planilha
    Dim procurado As String
    'Declara uma variável para receber o resultado de um MsgBox
    Dim result As VbMsgBoxResult
    'Declara duas variáveis do tipo inteiro
    'i -> Para controlar o laço de repetição
    'QuantPlanilhas -> para armazenar a quantidade de planilhas da pasta de trabalho atual
    Dim i, QuantPlanilhas As Integer
    'Atribui a quantidade de planilhas da pasta atual à variável QuantPlanilhas
    'O método ThisWorkbook.Worksheets.Count retorna esse parâmetro
    QuantPlanilhas = ThisWorkbook.Worksheets.Count
    'Mostra um InputBox para que seja inserido o dado que será procurado em todas a
    'Pasta de trabalho e atribui seu valor à variávle procurado
    procurado = InputBox("Digite o valor a ser procurado", "Valor procurado", "Exemplo, 2, 3, uma data qualquer")
    'Inicia o laço de repetição que varre todas as planilhas da pasta de trabalho atual
    For i = 1 To QuantPlanilhas Step 1
        'Seleciona toda a área da planilha
        With Worksheets(i).Range("A:IV")
            'Efetua o método de busca, que retorna o valor se for encontrado ou
            'Nothing caso não encontre nada
            Set c = .Find(procurado, LookIn:=xlValues)
            'Caso tenha achado algo, ativa a célula onde está o valor procurado
            'e oferece para o usuário se quer ou não continuar a busca
            If Not c Is Nothing Then
                Worksheets(i).Select
                Range(c.Address).Select
                result = MsgBox("Deseja continuar a busca?", vbYesNo, "Continuar?")
                'Caso queira, continua a busca, caso contrário, sai do laço
                If result = vbNo Then
                    Exit Sub
                End If
            End If
        End With
    Next
End Sub

Basta executar para observar o resultado.
Bom proveito!

Comentários

comentários

2 comentários em “VBA – Localizar dados em várias planilhas no Excel”

  1. Olá! estou com um probleminha que está me tirando o sono.
    A solução do licalizar bate na trave com a que estou buscando.
    O que eu preciso é o seguinte:
    Tenho que localizar os registros da coluna Plan1!A:A (nome parcial) em outra planilha (plan2) que contem o nome completo.
    Caso encontrar preciso copiar a linha inteira com dados cadastrais para uma Plan3.
    Se puder me ajudar a montar esta macro, agradeço muito.

Os comentários estão fechados.