VBA – Localizar dados em várias planilhas no Excel
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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!

![busca-blog[1] busca-blog[1]](http://www.tomasvasquez.com.br/blog/wp-content/uploads/2009/12/busca-blog1-300x299.jpg)
64 Convidados
1 Bot
março 25th, 2010 at 18:15
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.
março 25th, 2010 at 18:58
André,
Como a quantidade de dúvidas que são enviadas é grande, abri um fórum para melhor atender a estas solicitações. O endereço do fórum é:
http://www.tomasvasquez.com.br/forum
Além disso, a probabilidade de alguém ter tido o mesmo problema e de ele estar resolvido é bem grande. Há inclusive um fórum dedicado a esta planilha. Nos vemos lá!
Abraços
Tomás