Você já precisou realizar buscas em planilhas ou tabelas extensas no Excel? Ter formulário de pesquisa no VBA pode te ajudar bastante com isso!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso Canal do YouTube para mais vídeos!
Clique aqui para baixar a planilha utilizada nessa publicação!
O que é um formulário de pesquisa no VBA?
Um formulário de pesquisa é uma ferramenta que permite a pesquisa de dados específicos dentro de uma planilha, facilitando a leitura dos dados e a navegabilidade da planilha.
Quando utilizar o formulário de busca?
O formulário de busca no Excel é muito útil em planilhas que contenham um grande volume de informações, pois permite que os dados desejados sejam encontrados de maneira simplificada.
Como criar um formulário de pesquisa no VBA?
Para criarmos um formulário de pesquisa com VBA, precisamos primeiramente ter um formulário padrão de busca, que você pode aprender a fazer em nosso minicurso gratuito como criar um Formulário no Excel totalmente automático!
Para nosso exemplo, vamos utilizar uma planilha que possui informações como o nome, sexo, área, CPF e salário dos funcionários de uma empresa. Nesta planilha existe um formulário padrão já criado, de acordo com o ensinado no minicurso de criação de formulários, e um botão de busca que fará com que o formulário apareça se selecionado pelo usuário. Nesta planilha há também uma aba auxiliar com o nome de Fonte, contendo uma lista com todas as áreas da empresa e as informações das colunas para que o usuário selecione qual destas informações deseja obter utilizando o formulário:
Então, para que nosso formulário faça a pesquisa, devemos pensar nos passos que deverão acontecer para que seu funcionamento se dê corretamente.
1 – Ao clicarmos no botão Buscar, o formulário de busca deve ser exibido
Sempre que quisermos que um botão execute um código do VBA, precisamos que este código a ser executado esteja em um módulo. Precisamos então criar um novo módulo para inserção do código. Para isso, precisamos abrir o VBA (alt+F11 ou, caso não funcione, alt+fn+F11), clicar em Inserir e, em seguida, clicar em Módulo.
Então, um novo módulo é criado, e dentro dele faremos uma macro que fará com que o Excel exiba o formulário.
Para iniciarmos nossa macro, temos que escrever sub “nome da macro” (), e o VBA completa com o End sub ao darmos Enter. No nosso exemplo ficou sendo:
Sub exibe_formulário()
End Sub
No nosso exemplo, o formulário de busca possui o nome “userform_busca”. Para que ele seja aberto, no VBA trazemos seu nome . a ação que queremos que seja realizada. Para que a exibição seja feita, usamos então o comando de ação “show”. O código, portanto, fica assim:
Sub exibe_formulário()
userform_busca.Show
End Sub
Precisamos, agora, que esta macro seja executada através do botão de buscar. Para isso, clicamos com o botão direito no botão de buscar e selecionamos “Atribuir macro…”
Então, selecionamos a macro que acabamos de criar para exibição do formulário:
Agora, quando clicamos no botão, o formulário é automaticamente exibido.
Precisamos, então, que o VBA exiba uma lista no campo “Qual a resposta desejada?”, com todas as possibilidades, para que o usuário selecione a desejada.
Na nossa planilha de exemplo, temos esta lista na aba “Fonte”, coluna “Tipo”. Assim, o usuário deve poder escolher visualizar alguma das seguintes informações: Área, CPF, Nome, Salário, Sexo. Vamos criar um código para que o VBA exiba esta lista de opções no formulário.
Para isso, precisamos que nosso código seja executado sempre que o formulário for aberto. Precisamos então que nosso código esteja dentro do formulário.
Para criarmos nosso código dentro do formulário, selecionamos, dentro do VBA, nosso formulário com o botão direito e clicamos em Exibir Código:
Como queremos que o código seja executado quando selecionarmos a caixa de opções do formulário, temos que preparar o VBA, utilizando as duas caixas superiores do painel, alterando a caixa “(Geral)” para “UserForm” e “(Declaração)” para “Initialize”:
Vamos então começar a escrever nosso código. Entre as linhas “Private Sub UserForm_Initialize()” e “End Sub”, inserimos o seguinte:
caixa_resposta.RowSource = “Fonte!C3:C7”
Onde:
caixa_resposta é a caixa do formulário onde vamos colocar nossas opções;
RowSource é a lista de informações que entrarão na caixa resposta do formulário;
“Fonte!C3:C7” Células que irão compor a lista de informações (aba Fonte, células C3 a C7)
Nosso próximo passo será fazer com que o VBA selecione a informação da lista que acrescentamos de acordo com a seleção do usuário. Ou seja, se o usuário desejar saber o CPF, por exemplo, o VBA deverá retornar o CPF da pessoa especificada.
Para criarmos uma macro que seja executada toda vez que alguma opção é selecionada, basta darmos duplo clique na caixa de respostas do formulário dentro do VBA.
Após isso, a seguinte tela será exibida:
Agora, em nosso código, precisamos que nossa macro identifique em qual linha está a informação digitada pelo usuário (nome ou CPF), para então retornar a informação desejada.
Como queremos descobrir e guardar a informação que será imputada pelo usuário, vamos criar uma variável, que será a seguinte:
linha = Cells.Find(caixatexto_informacao).Row
Onde:
linha é o nome da variável;
Cells.Find é um comando que encontra a célula que contém uma informação;
caixatexto_informacao é a caixa do formulário onde o usuário irá digitar o nome ou CPF a serem localizados;
.Row localiza a linha na qual a informação digitada pelo usuário se encontra.
Agora, com a linha onde a informação está localizada, temos que retornar a informação selecionada pela pessoa. Vamos fazer isso utilizando o comando if, conforme segue:
If caixa_resposta.Value = "Nome" Then
coluna = 1
ElseIf caixa_resposta.Value = "Sexo" Then
coluna = 2
ElseIf caixa_resposta.Value = "Área" Then
coluna = 3
ElseIf caixa_resposta.Value = "CPF" Then
coluna = 4
Else
coluna = 5
End If
Assim, temos cada informação associada a uma coluna da nossa planilha. Se a informação escolhida for o nome, a coluna da nossa planilha será a coluna 1 (coluna “A”), se for o sexo, será a coluna 2 (coluna “B”), e assim por diante.
Temos agora duas informações, a linha em que a informação buscada se encontra e a coluna da informação de retorno. Podemos trazer a informação de retorno em uma caixa de mensagem, utilizando o comando messagebox, fazendo com que seja retornada a informação na célula especificada pela linha e coluna que encontramos anteriormente:
MsgBox (Cells(linha, coluna))
Assim, nosso código está pronto! O código completo fica conforme segue:
Private Sub caixa_resposta_Change()
linha = Cells.Find(caixatexto_informacao).Row
If caixa_resposta.Value = "Nome" Then
coluna = 1
ElseIf caixa_resposta.Value = "Sexo" Then
coluna = 2
ElseIf caixa_resposta.Value = "Área" Then
coluna = 3
ElseIf caixa_resposta.Value = "CPF" Then
coluna = 4
Else
coluna = 5
End If
MsgBox (Cells(linha, coluna))
End Sub
Private Sub UserForm_Initialize()
caixa_resposta.RowSource = "Fonte!C3:C7"
End Sub
Hashtag Treinamentos
Nosso curso de excel funciona para qualquer um, desde a pessoa que não sabe absolutamente nada de Excel até aquela pessoa que quer aquele algo a mais para impressionar!
Quer aprender mais sobre VBA com um Minicurso Gratuito?
Sócio fundador e especialista em Python da Hashtag Treinamentos. Criador do Método Impressionador para ensinar pessoas comuns a crescerem na carreira e se destacarem na empresa usando o Python.