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
texto = "[email protected]"
priTraco = InStr(texto, "-")
segTraco = InStr(priTraco + 1, texto, "-")
terTraco = InStr(segTraco + 1, texto, "-")
nome = Left(texto, priTraco - 1)
sobrenome = Mid(texto, priTraco + 1, segTraco - priTraco - 1)
email_texto = Mid(texto, segTraco + 1, terTraco - segTraco - 1)
empresa = Right(texto, Len(texto) - terTraco)
Debug.Print nome
Debug.Print sobrenome
Debug.Print email_texto
Debug.Print empresa
End Sub
Explicação do código acima:
- Dimensionar:
- as variáveis “texto”, “nome”, “sobrenome”, “email_texto” e “empresa” como String (tipo texto)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Armazenar na variável “texto” o texto “[email protected]”
- 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 “nome” o resultante da função Left, que vai pegar uma parte de um texto a partir da esquerda, por uma quantidade de caracteres específica. Nesse caso, vamos pegar o que estiver presente na variável “texto”, até a posição dada por “priTraco” menos 1, que vai resultar em 5 caracteres. Portanto, o resultado armazenado na variável “nome” será “Diego”
- 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 “empresa” algo que vai ser consequência da função Right, que vai pegar uma parte de um texto a partir da direita, por uma quantidade de caracteres específica, e a função Len, que vai pegar retornar a quantidade de caracteres numa palavra. Nesse caso, vamos pegar o que estiver presente na variável “texto”, do final da palavra, até o terceiro traço. Portanto, o resultado armazenado na variável “empresa” será “Hashtag”
- 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:
Sub separarTextosSplit()
Dim texto As String, nome As String, sobrenome As String, email_texto As String, empresa As String
Dim matriz As Variant
texto = "[email protected]"
matriz = Split(texto, "-")
nome = matriz(0)
sobrenome = matriz(1)
email_texto = matriz(2)
empresa = matriz(3)
Debug.Print nome
Debug.Print sobrenome
Debug.Print email_texto
Debug.Print empresa
End Sub
Explicação do código acima:
- Dimensionar:
- as variáveis “texto”, “nome”, “sobrenome”, “email_texto” e “empresa” como String (tipo texto)
- a variável “matriz” como Variant (“qualquer coisa”)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Armazenar na variável “texto” o texto “[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)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Configurar:
- 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)
- Mostra o texto que está armazenado na propriedade Address da variável “intervalo”
- Se encerra o código
Rodando o código acima, na janela de verificação imediata teremos:
Sub lerTabelaObjetos()
Dim tabela As ListObject
Dim intervalo As Range
Set tabela = Sheets("TabelaObjeto").ListObjects("TabelaVBA")
Set intervalo = tabela.DataBodyRange
Debug.Print intervalo.Address
End Sub
Explicação do código acima:
- Dimensionar:
- A variável “tabela” como um ListObject (como o VBA se refere aos intervalos convertidos a tabelas, no Excel)
- a variável “intervalo” como um Range (intervalo de células)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Configurar:
- a variável “tabela” para assumir o intervalo de células configurada para a tabela “Tabela VBA” da aba “TabelaObjeto”
- a variável “intervalo” para assumir o intervalo de células (range) do corpo (body) de dados (data) da tabela representada pela variável “tabela”
- Mostra o texto que está armazenado na propriedade Address da variável “intervalo”
- Se encerra o código
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
End Sub
Explicação do código acima:
- Dimensionar:
- A variável “tabela” como um ListObject (como o VBA se refere aos intervalos convertidos a tabelas, no Excel)
- as variáveis “atendimento” e “codigo_cliente” como Long (número inteiro grande)
- a variável “tempoIni” como Double (número decimal)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- 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
tempoIni = Timer * 1000
matriz = Sheets("TabelaObjeto").ListObjects("TabelaVBA").DataBodyRange
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
End Sub
Explicação do código acima:
- Dimensionar:
- A variável “tabela” como um ListObject (como o VBA se refere aos intervalos convertidos a tabelas, no Excel)
- as variáveis “atendimento” e “codigo_cliente” como Long (número inteiro grande)
- a variável “tempoIni” como Double (número decimal)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Armazenar na variável “tempoIni” o resultante da multiplicação entre a função Timer e o número 1000
- Configurar a variável “matriz” 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, do menor valor de índice da matriz (primeiro termo) até o maior valor de índice da matriz (último termo), representadas pela variável “i”, que muda a cada volta, fazendo as seguintes ações:
- 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:
- Variáveis no VBA
- Tipos de dados no VBA
- Fórmula de texto InStr
- Fórmula de texto Left
- Fórmula de texto Mid
- Fórmula de texto Right
- Matrizes no VBA
- Estrutura de repetição For
Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel, Power BI e VBA! Um abraço!
Hashtag Treinamentos
Para acessar outras publicações de VBA, clique aqui!
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.