Nessa publicação vou te mostrar como você pode utilizar os eventos no VBA de forma bem simples para analisar bases de dados no Excel da forma certa!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Clique aqui para baixar a planilha utilizada nessa publicação!
Na aula de hoje vamos ver uma maneira mais fácil de fazer a leitura de bases de dados muito complexas e pouco visuais no Excel.
Em nossa base de dados de exemplo, temos uma planilha com muitos valores e de difícil leitura:
Vamos utilizar o VBA para criarmos um destaque na linha, coluna e célula selecionada, deixando a célula selecionada realçada e facilitando a navegação entre os valores. Vamos utilizar eventos no VBA para fazermos isso.
Para fazermos este realce, abrimos o VBA (alt+F11 ou alt+fn+F11, caso não funcione). No VBA, vamos seguir alguns passos.
1º Passo: Declarar variáveis
Primeiramente podemos notar que o realce vai somente até a última célula preenchida da planilha. Temos então que fazer com que nosso código identifique a última célula preenchida da planilha.
No Excel, para chegarmos a última célula preenchida da planilha, utilizamos o comando ctrl + seta para baixo. Então, no VBA para chegarmos a última linha utilizamos a seguinte fórmula:
ult_linha = Sheets(“Planilha1”).Range(“A1”).End(xlDown).Row
Onde:
ult_linha é o nome da variável que traz a última linha preenchida da planilha;
Sheets(“Planilha1”) seleciona a aba Planilha1 da base de dados;
.Range(“A1”) seleciona a célula A1 dessa aba;
.End(xlDown) o comando End funciona como o ctrl e xlDown como “seta para baixo”, chegando à última célula preenchida;
.Row retorna a linha correspondente a esta célula.
Com isso, temos uma variável que retorna a última linha preenchida da tabela. Vamos agora criar uma nova variável que retorne a última coluna, que será a seguinte:
ult_coluna = Sheets(“Planilha1”).Range(“A1”).End(xlToRight).Column
Onde:
ult_coluna é o nome da variável que traz a última coluna preenchida da planilha;
Sheets(“Planilha1”) seleciona a aba Planilha1 da base de dados;
.Range(“A1”) seleciona a célula A1 dessa aba;
.End(xlToRight) funciona como o comando crtl + seta para direita (para irmos para a última coluna), onde o comando End funciona como o ctrl e xlToRight como “seta para direita”
.Column retorna o número correspondente à última coluna preenchida.
Temos então a última linha e última coluna preenchidas armazenadas em duas variáveis.
2º Passo: Verificar se o Target está dentro do intervalo da tabela
Neste caso, o target será a célula da base de dados selecionada pelo usuário. Caso o usuário selecione uma célula fora do intervalo que contém valores, as cores da linha e coluna não serão alteradas.
Para sabermos se o target está dentro do intervalo da tabela, utilizaremos as variáveis do passo anterior. Se a linha da célula selecionada for menor que a linha trazida pela variável ult_linha e a coluna estiver à esquerda da coluna trazida pela variável ult_coluna, temos que o target está dentro do intervalo da tabela.
Para fazermos esta lógica no VBA, utilizaremos a seguinte expressão:
If Target.Column >= 1 And Target.Column <= ult_coluna Then
If Target.Row >= 1 And Target.Row <= ult_linha Then
Onde:
If Target.Column >= 1 And Target.Column <= ult_coluna Then é uma fórmula condicional. Se a coluna da célula target (célula selecionada da planilha) for maior ou igual a 1 e menor ou igual a coluna trazida pela variável ult_coluna, então o próximo passo do código será realizado.
If Target.Row >= 1 And Target.Row <= ult_linha Then é a mesma condicional anterior trazida agora para as linhas da tabela.
Feita essa verificação, caso o target esteja dentro do intervalo, o VBA segue para o próximo passo.
3º Passo: Retirar o preenchimento de todas as células antes de pintar as novas células
Agora, vamos retirar o preenchimento das demais células da planilha, de modo que apenas a célula selecionada com sua linha e coluna tenham preenchimento. Para isto, vamos acrescentar a seguinte linha ao nosso código:
Cells.Interior.ColorIndex = xlNone
Onde:
O comando cells indica que a modificação será feita em todas as células da aba selecionada;
Interior.ColorIndex traz o preenchimento destas células;
xlNone indica que o preenchimento será nulo.
Portanto, com este comando, todas as células da aba selecionada ficarão sem preenchimento.
4º Passo: Pintar a coluna do Target
Vamos agora pintar a coluna da célula selecionada, indo da primeira até última linha preenchida da tabela. Então, acrescentamos a seguinte linha ao nosso código:
Range(Cells(1, Target.Column), Cells(ult_linha, Target.Column)).Interior.ColorIndex = 27
Onde:
Range(Cells(1, Target.Column), Cells(ult_linha, Target.Column)) seleciona as células que serão preenchidas, indo da primeira linha até a última preenchida, dentro da coluna atual do target. Cells(1, Target.Column) seleciona a primeira célula (na primeira linha) da coluna do target e Cells(ult_linha, Target.Column) seleciona a última célula (na última linha) da coluna do target. O comando range faz com que todas as células que estejam neste intervalo (neste range) sejam selecionadas;
Interior.ColorIndex = 27 altera a cor de preenchimento das células selecionadas para a cor 27, que corresponde ao amarelo no VBA.
Assim, por meio desta expressão, o VBA irá selecionar da primeira a última linha da coluna do target e inserir o preenchimento em amarelo.
5º Passo: Pintar a linha do Target
O mesmo passo anterior será feito agora para a linha do target, onde iremos preencher da primeira até a última coluna na linha do target com a cor amarela.
Range(Cells(Target.Row, 1), Cells(Target.Row, ult_coluna)).Interior.ColorIndex = 27
Utilizamos a variável que criamos que traz a última coluna para definirmos o range de preenchimento.
6º Passo: Pintar a célula ativa de uma cor diferente só pra diferenciar das demais
Vamos preencher a célula ativa utilizando a seguinte linha em nosso código:
ActiveCell.Interior.ColorIndex = 34
Que preenche a célula ativa (ActiveCell, ou Target) com a cor de número 34, que corresponde ao azul no VBA.
Para fechar, vamos encerrar as condicionais que criamos no 2º passo, com os casos em que a célula selecionada não atenda à condicional (esteja fora do intervalo que contém dados). Para isto, acrescentamos:
Else
Cells.Interior.ColorIndex = xlNone
End If
Else
Cells.Interior.ColorIndex = xlNone
End If
As expressões Cells.Interior.ColorIndex = xlNone retiram o preenchimento de todas as células da aba selecionada. Então, caso o target esteja fora do intervalo de dados, todas as células da aba ficarão sem preenchimento.
Tudo isso que fizemos facilita bastante a tarefa de analisar bases de dados que muitos enfrentam diariamente.
Então, encerramos a sub e temos nosso código gerando uma planilha que facilita a visualização de grandes volumes de dados, nos mostrando o jeito mais fácil e simples de analisar bases de dados. Nesta planilha, novos dados poderão ser acrescentados e nosso código seguirá alterando o preenchimento das células e suas colunas e linhas conforme forem selecionadas.
Você sabe o que é o Nível Impressionador do nosso Curso de Excel? É um nível que está acima do avançado! Quer saber mais? Só clicar no link!
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.