Tag Archives: Localizar

VBA – Busca de texto de células retornando o número da linha

Encontrado nas andanças na internet, a macro abaixo faz exatamente a função “Localizar” do Excel, só que no VBA.

Public Function FindRowPos(sText As Variant, _
                           Optional SearchDirection As XlSearchDirection = xlNext, _
                           Optional SearchOrder As XlSearchOrder = xlByRows) As Long
 
    Dim lResult As Long, oRg As Range
 
    Set oRg = Cells.Find(What:=sText, LookIn:=xlValues, _
                         LookAt:=xlPart, SearchOrder:=SearchOrder, _
                         SearchDirection:=SearchDirection, _
                         MatchCase:=False, SearchFormat:=False)
 
    If Not oRg Is Nothing Then lResult = oRg.Row
 
    FindRowPos = lResult
 
    Set oRg = Nothing
End Function

O exemplo de chamada seria bem simples:

Public Sub TestandoOBuscar()
    MsgBox FindRowPos("bla")
    MsgBox FindRowPos("bla", xlNext)
    MsgBox FindRowPos("bla", xlNext, xlByColumns)
End Sub

Bom proveito!

Referências

http://snippets.dzone.com/posts/show/13521

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!