Hoje eu quero te mostrar 3 dicas de VBA que todos deveriam conhecer para facilitar e agilizar seus projetos em VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
3 Dicas de VBA que Você Precisa Conhecer
Fala, Impressionadores! Na aula e hoje eu quero te mostrar 3 dicas de VBA que todos deveriam conhecer.
A primeira dica é para separar strings no VBA (como separar textos no VBA) e ainda nessa primeira dica vamos separar textos com split no VBA, então teremos duas maneiras para fazer essa separação.
Na segunda dica nós vamos ler informações no VBA do Excel, ou seja, vamos ler informações do Excel, ler tabelas no VBA, mas sem a formatação de tabela.
Na terceira dica eu vou te mostrar como ler informações de forma rápida no VBA. Para essa parte vamos ler informações com matriz no VBA e você vai ver como um método pode ser mais rápido do que outro.
Além disso você vai aprender como calcular o tempo de execução do seu código para fazer comparações entre códigos.
Inserindo um Módulo no VBA
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.
Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.
Por padrão ele terá o nome de “Módulo 1”. Colocaremos as seguintes sub dentro dele:
Dica 1) macro para separar textos
Sub separarTextos()
Dim texto As String, nome As String, sobrenome As String, email_texto As String, empresa As String
Armazenar na variável “priTraco” o que for resultante da função InStr, que vai verificar partes de texto dentro de outro texto, e retornar a posição desse texto dentro de outro texto. No caso estamos localizando “-“ dentro do que foi armazenado na variável “texto”, e descobrir sua posição, que será igual a 6.
Armazenar na variável “segTraco” o que for resultante da função InStr, olhando a partir de uma posição além do primeiro traço (que vai ser ignorado), que vai resultar em 13
Armazenar na variável “terTraco” o que for resultante da função InStr, olhando a partir de uma posição além do segundo traço (que vai ser ignorado), que vai resultar em 29
Armazenar na variável “sobrenome” o resultado da fórmula Mid, que vai retornar uma cadeia de textos a partir da posição do primeiro traço mais 1, e o ponto entre o primeiro espaço e o segundo traço menos 1 (limite da palavra). Portanto, o resultado armazenado na variável “sobrenome” será “Amorim”
Armazenar na variável “email_texto” o resultado da fórmula Mid, que vai retornar uma cadeia de textos a partir da posição do primeiro traço mais 1, e o ponto entre o segundo espaço e o terceiro traço menos 1 (limite da palavra). Portanto, o resultado armazenado na variável “email_texto” será “[email protected]”
Armazenar na variável “matriz” o resultado da função Split, que vai separar o que estiver presente na variável “texto”, considerando o delimitador “-“, e armazenar nos elementos da matriz (no caso 4 elementos)
Armazenar na variável “nome” o 1º elemento da matriz (elemento 0)
Armazenar na variável “sobrenome” o 2º elemento da matriz (elemento 1)
Armazenar na variável “email_texto” o 3º elemento da matriz (elemento 2)
Armazenar na variável “empresa” o 4º elemento da matriz (elemento 3)
Mostra o texto que está armazenado na variável “nome”
Mostra o texto que está armazenado na variável “sobrenome”
Mostra o texto que está armazenado na variável “email_texto”
Mostra o texto que está armazenado na variável “empresa”
Se encerra o código
Rodando o código acima, na janela de verificação imediata teremos:
Dica 2) código para ler informações de tabelas
Criaremos mais um módulo para separar as macros listadas abaixo.
Sub lerTabela()
Dim intervalo As Range
Set intervalo = Sheets("Tabela").Range("A1").CurrentRegion Set intervalo = intervalo.Offset(1).Resize(intervalo.Rows.Count - 1)
Debug.Print intervalo.Address
End Sub
Explicação do código acima:
Dimensionar:
a variável “intervalo” como um Range (intervalo de células)
a variável “intervalo” para assumir o intervalo de células preenchidas a partir de A1, da aba “Tabela”
a variável “intervalo” para assumir o intervalo de células preenchidas a partir de A1, da aba “Tabela” deslocado de 1 linha para baixo (pelo comando Offset), redimensionando para receber a contagem de linhas – 1 (antes considerava o cabeçalho, agora como desceu 1 linha ficaria considerando apenas uma linha em branco no final, retirada)
Rodando o código acima, na janela de verificação imediata teremos:
Dica 3) macro para gravar o tempo e informações em objetos diferentes: por tabela e por matriz
Criaremos mais um módulo para separar as macros listadas abaixo.
Sub lerInformacoes() Dim tabela As ListObject Dim atendimento As Long, codigo_cliente As Long Dim tempoIni As Double
tempoIni = Timer * 1000
Set tabela = Sheets("TabelaObjeto").ListObjects("TabelaVBA")
For i = 1 To tabela.DataBodyRange.Rows.Count atendimento = tabela.ListRows(i).Range(1, 1).Value codigo_cliente = tabela.ListRows(i).Range(1, 2).Value Next
Debug.Print (Timer * 1000) - tempoIni 'tempo em ms
Armazenar na variável “tempoIni” o resultante da multiplicação entre a função Timer e o número 1000
Configurar a variável “tabela” para assumir o intervalo de células configurada para a tabela “Tabela VBA” da aba “TabelaObjeto”
Utilizar de uma estrutura de repetição do tipo For, que vai da volta (representada pela variável “i”) 1 até a quantidade (count) de linhas (rows) do intervalo de dados (data body) da tabela representada pela variável “tabela”, fazendo as ações a seguir:
Armazenar na variável “atendimento” o valor da célula de elemento coluna 1 e linha 1, da linha “i” da tabela
Armazenar na variável “codigo_cliente” o valor da célula de elemento coluna 2 e linha 1, da linha “i” da tabela
Mostra o texto resultante da subtração do marcador do momento e o tempo inicial, marcado por “tempoIni”, resultando no tempo de duração do código (em milissegundos)
Se encerra o código
Rodando o código acima, na janela de verificação imediata teremos:
Sub lerInformacoesMatriz()
Dim matriz As Variant Dim atendimento As Long, codigo_cliente As Long Dim tempoIni As Double
For i = LBound(matriz) To UBound(matriz) atendimento = matriz(i, 1) codigo_cliente = matriz(i, 2) Next Debug.Print (Timer * 1000) - tempoIni 'tempo em ms
Armazenar na variável “atendimento” o que tiver no item da matriz de valor que está na célula da linha “i”, e da coluna 1 (A) da planilha
Armazenar na variável “codigo_cliente” o que tiver no item da matriz de valor que está na célula da linha “i”, e da coluna 2 (B) da planilha
Mostra o texto resultante da subtração do marcador do momento e o tempo inicial, marcado por “tempoIni”, resultando no tempo de duração do código (em milissegundos)
Se encerra o código
Rodando o código acima, na janela de verificação imediata teremos:
Conclusão
Nessa aula sobre 3 Dicas de VBA você aprendeu sobre:
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.
Procure o que você quiser sobre Excel, VBA, Power BI ou Python:
Aprenda tudo de Excel para se tornar uma referência no Mercado de Trabalho
Leve os treinamentos da Hashtag para dentro da sua Empresa