VBA -  Procurando informações na Planilha (Método Find)


Neste artigo vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA para localizar informações em uma planilha Excel.

A aplicação  irá permitir que o usuário localize informações em uma planilha com dados da seguinte forma:

  1. Localizar a primeira ocorrência de uma string;
  2. Localizar a última ocorrência de uma string;
  3. Localizar a partir de um critério definido e copiar o conteúdo da célula para outra planilha;

Abaixo vemos a figura da aplicação sendo executada exibindo a planilha Excel e os botões de comando :

É uma aplicação simples que mostra aos iniciantes e interessados automatizar tarefas no Microsoft Excel usando a linguagem VBA. Só isso.

Os recursos usados no projeto deste artigo foram:

Antes de iniciar temos que realizar duas configurações no Microsoft Excel 2007:

Obs: A necessidade de habilitar a execução de macros é que por padrão, o Excel coloca um nível de segurança mais elevado pois códigos maliciosos podem ser executados em scripts através de macros no Excel.

Vamos ativar a guia do desenvolvedor e logo  em seguida habilitar a execução de macros.

Para ativar a guia do desenvolvedor (se ainda não estiver ativa) siga os seguintes passos:

Abra o Excel 2007 e ative o Menu principal de opções clicando no botão superior a esquerda, conforme a figura abaixo;

A seguir clique na guia Opções do Excel para abrir a janela - Opções do Excel;

Nesta janela, selecione o item - Mais Usados - e a seguir marque o item - Mostrar guia Desenvolvedor na Faixa de Opções e clique no botão OK;

No menu do Excel selecione a guia do Desenvolvedor e em seguida clique em Segurança de Macro;

Na janela Central de Confiabilidade selecione a opção - Configurações de Macro - e marque o item para habilitar todas as macros conforme a figura abaixo:

Pronto , feito isso já podemos iniciar o desenvolvimento da aplicação VBA no Excel 2007.

Abra então o Excel 2007 , será aberta uma planilha em branco. Clique então no botão no canto superior a esquerda para abrir o menu principal de opções;

Selecione a opção Salvar como e clique no item : Pasta de Trabalho Habilitada para Macro do Excel;

Em seguida informe o nome do arquivo : ProcurandoExcel;

Nossa primeira tarefa será criar a planilha onde iremos armazenar as informações dos clientes. Sim, isso mesmo, vamos armazenar as informações no próprio Excel.

Para facilitar o nosso trabalho vamos preencher a planilha Plan1 com dados oriundos de um banco de dados Access, no caso o banco de dados Northwind.mdb;

Na planilha clique no menu Dados e a seguir em Do Access; (Poderíamos importar dados da web , de um arquivo texto , etc.)

A seguir na janela - Selecionar Fonte de Dados - selecione o banco de dados Northwind.mdb

A seguir selecione a tabela Categories na janela Selecionar Tabela;

Para concluir clique no botão OK da janela Importar Dados;

Os dados serão importados diretamente para a planilha Plan1 conforme mostra a figura abaixo. A coluna Data e a linha 10 e 11 foram digitadas por mim para adequar os dados ao nosso exemplo:

Até o momento criamos a nossa planilha com os dados agora vamos partir para a automação do cadastro das informações usando VBA.

Para começar vamos incluir três botões de comando na planilha da seguinte forma:

  1. No menu clique na guia Desenvolvedor;
  2. A seguir clique na opção Inserir para abrir a caixa de controles disponíveis;
  3. Clique então no controle Botão (Button) e a seguir clique na área vazia a direita da planilha conforme mostra a figura para incluir o primeiro Botão;
  4. Repita a operação para incluir o segundo botão;

Quando você incluir um botão na planilha será aberta a janela para atribuir macro conforme mostra a figura a seguir:

Você deve então fazer o seguinte:

Digite  o código conforme mostra a figura a seguir no evento Click do botão no Módulo1 :

Este código faz a localização da primeira ocorrência de uma string no intervalo das colunas B e C usando o método Find:

O método Find localiza uma informação em um intervalo

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Nome Tipo de Dados Descrição
What Variant Os dados a procurar. Pode ser uma cadeia ou qualquer tipo de dados do Microsoft Excel.
After Variant A célula após o qual você deseja que a pesquisa para começar. Isto corresponde à posição da célula ativa quando uma busca é feita a partir da interface do utilizador. Depois de notar que deve ser uma única célula no intervalo. Lembre-se que a pesquisa começa depois dessa célula, a célula especificada não é pesquisada até que o método envolve a volta a esta célula. Se você não especificar este argumento, a pesquisa começará após a célula no canto superior esquerdo do intervalo
Lookin Variant O tipo de informação
LookAt Variant Pode ser uma das seguintes constantes XlLookAt: xlWhole ou xlPart.
SearchOrder Variant Pode ser uma das seguintes constantes XlSearchOrder : xlByRows ou xlByColumns.
SearchDirection Variant A direção da pesquisa
MatchCase Variant Pode ser True para fazer a busca usando a pesquisa sensível. O valor padrão é False.
MatchByte Variant Usado apenas se você tiver selecionado ou instalado o suporte doube-byte da linguagem>
SearchFormat Variant O formato da pesquisa

Retorno : Um objeto Range que representa a primeira célula onde essa informação é encontrada.

Este método retorna Nothing se nenhuma correspondência for encontrada e não afeta a seleção ou a célula ativa.

As configurações para Lookin, LookAt, SearchOrder, e MatchByte são salvas cada vez que você utilizar este método.
Se você não especificar valores para esses argumentos na próxima vez que você chamar o método, os valores salvos são usados.

A definição destes argumentos altera as configurações na caixa de diálogo Localizar e altera as configurações na caixa de diálogo Localizar alterando os valores salvos que são usados se você omitir os argumentos. Para evitar problemas, defina esses argumentos explicitamente cada vez que você usa este método.

Você pode usar os métodos FindNext e FindPrevious para repetir a pesquisa.
 

Para o outro botão iremos incluir o código abaixo para localizar a última ocorrência de uma string nas colunas B e C no evento Botão2_Clique que também usa o método Find:

Sub Botão4_Clique()
 Dim EncontraString As String
    Dim Intervalo As Range
    EncontraString = InputBox("Informe o valor a procurar")
    If Trim(EncontraString) <> "" Then
        With Sheets("Plan1").Range("B:C")
            Set Intervalo = .Find(What:=EncontraString, _
                                  After:=.Cells(1), _
                                  LookIn:=xlValues, _
                                  LookAt:=xlWhole, _
                                 SearchOrder:=xlByRows, _
                                 SearchDirection:=xlPrevious, _
                                 MatchCase:=False)
            If Not Intervalo Is Nothing Then
                Application.Goto Intervalo, True
            Else
                MsgBox "Não Localizado"
            End If
        End With
    End If
End Sub

 

Finalmente no último botão vamos incluir o código VBA no evento Botão3_Clique conforme abaixo:

Sub Botão5_Clique()
Dim PrimeiraOcorrencia As String
    Dim mVetor As Variant
    Dim Intervalo As Range
    Dim Contador As Long
    Dim I As Long
    Dim NovaPlanilha As Worksheet
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    'Define o critério de buca em um array
    mVetor = Array("#")
    'Você pode usar mais de um valor no array
    'mVetor = Array("@", "#")
    'Inclua uma nova planilha no seu workbook para copia
    'Você pode usar também uma planilha existente como fizemos abaixo
    Set NovaPlanilha = Sheets("Plan2")
    'não vou criar uma nova planilha mas se desejar comente a linha acima
    'descomente a linha de baixo
    'Set NovaPlanilha = Worksheets.Add
    With Sheets("Plan1").Range("A1:Z100")
        Contador = 0
        For I = LBound(mVetor) To UBound(mVetor)
            'Se voce usar LookIn:=xlValues vai funcionar
            'com a célula da forma que usa o simbolo "@"
            'Nota : Eu usei xlPart neste exemplo e não xlWhole
            Set Intervalo = .Find(What:=mVetor(I), _
                                  After:=.Cells(.Cells.Count), _
                                  LookIn:=xlFormulas, _
                                  LookAt:=xlPart, _
                                  SearchOrder:=xlByRows, _
                                  SearchDirection:=xlNext, _
                                  MatchCase:=False)
            If Not Intervalo Is Nothing Then
                PrimeiraOcorrencia = Intervalo.Address
                Do
                    Contador = Contador + 1
                    Intervalo.Copy NovaPlanilha.Range("A" & Contador)
                    ' Use este codigo se você quiser somente copiar o valor
                    ' NovaPlanilha.Range("A" & Contador).Value = Intervalo.Value
                    Set Intervalo = .FindNext(Intervalo)
                Loop While Not Intervalo Is Nothing And Intervalo.Address <> PrimeiraOcorrencia
            End If
        Next I
    End With
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

 

Neste código definimos que desejamos copiar o conteúdo das células que contenham o caractere # para a planilha Plan2.

Agora vamos alterar os textos de exibição dos botões:

  1. Para alterar o texto do botão clique com o botão direito do mouse sobre o botão e a seguir selecione : Alterar Texto;
  2. Informe os textos conforme indica a figura para os dois botões;

Feito isso basta executa o projeto e clicar em cada um dos botões para realizar a busca.

Ou para copiar o texto com o critério para a planilha Plan2:

Eu sei é apenas Visual Basic for Applications (VBA), mas eu gosto...

Pegue a planilha com o código VBA aqui: ProcurandoExcel.zip

Salmos 5:9 Porque não há fidelidade na boca deles; as suas entranhas são verdadeiras maldades, a sua garganta é um sepulcro aberto; lisonjeiam com a sua língua.
Salmos 5:10
Declara-os culpados, ó Deus; que caiam por seus próprios conselhos; lança-os fora por causa da multidão de suas transgressões, pois se revoltaram contra ti.
Salmos 5:11
Mas alegrem-se todos os que confiam em ti; exultem eternamente, porquanto tu os defendes; sim, gloriem-se em ti os que amam o teu nome.

Salmos 5:12
Pois tu, Senhor, abençoas o justo; tu o circundas do teu favor como de um escudo.


Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# 2012 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

Referências:


José Carlos Macoratti