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:
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:
![]() |
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)
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.
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:
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.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:
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx