Para quem não sabe, o VBA é uma ferramenta de programação dentro do Excel. Por meio dela, podemos fazer uma determinada tarefa de modo automático. Para isso, basta “dizermos” ao VBA o que queremos (fazemos isso por meio de um código de programação) e ele executará os procedimentos.
Em muitas das vezes, usamos o VBA para fazer uma tarefa repetitiva, por motivo simples: o computador é bem mais rápido que nós e não comete falhas (desde que não falhemos na execução da criação do código, claro).
E não usamos o VBA necessariamente para executar macros: a macro é uma das possibilidades de uso do VBA. Podemos usá-lo para criar um código real, que será executado e fará a tarefa. É essa a ideia de utilização aqui no site/blog.
Especificamente no artigo de hoje, veremos um procedimento Sub. Diferente da Function (que nos traz procedimentos que calcularão ou trarão um valor final – e já foi descrito em outro artigo do blog para criar uma função), a Sub faz procedimentos na sua planilha de cálculo, de modo a te entregar um “valor” final (neste caso, todo o processo realizado).
Para aprender um pouco mais sobre a utilização do VBA e da Sub, vamos a um exemplo, abaixo.
Esse artigo tem vídeo disponível no nosso canal no YouTube. Caso queira, veja a versão em vídeo, logo abaixo. Não se esqueça de nos seguir por lá para sempre receber conteúdo!
O exemplo
Você trabalha em uma empresa que tem 15 filiais, sempre chamadas de F01, F02, F03, …, até F14 e F15. Seu gestor pediu para você salvar o DRE (“Demonstrativo de Resultados do Exercício”, um documento contábil sobre o resultado da empresa) de cada uma delas em uma aba chamada “F01_DRE” (sempre neste formato).
Em condições normais, você teria que fazer por várias vezes o processo de criar e renomear aba. É simples, mas repetitivo. Você precisaria clicar no “+” ao lado da última aba e renomeá-la (botão inverso na aba, Renomear) por algumas diversas vezes. No nosso caso, 15 já é um número grande. Mas imagine no caso de 150 filiais? Você teria que repetir o processo 150 vezes?
Para isso podemos usar o VBA! Sabendo que teremos um procedimento repetido, basta colocarmos o VBA para fazer isso no nosso lugar. É sobre isso que veremos no artigo de hoje.
Primeiro passo: coloque no Excel o que você precisa
Para realizar essa tarefa, a primeira etapa é informar ao Excel e VBA parte do que você precisa.
Para isso, precisamos incluir em algum lugar o nome das abas que serão criadas. No nosso caso, colocamos todos os nomes na coluna A da aba “Nomes” (células A1 a A15). A figura 1 ilustra isso.
Note que apenas uma parte do nome está na coluna A. Caso você tenha reparado, a exigência é que criemos abas do tipo “F01_DRE”. Esse ajuste final (“_DRE”), incluiremos por meio da fórmula do VBA. A ideia é que, independentemente do que acompanhará o nome da filial, basta colocarmos o nome das filiais em algum lugar e o resto preenchemos via VBA.
Iniciando nosso programa
Com as informações das filiais já dadas, vamos criar o nosso código.
Para isso, abra o VBA. Isso é facilmente feito apertando Alt + F11 na tela do Excel. A figura 2 ilustra o VBA aberto.
Insira um novo módulo clicando no menu superior em Inserir > Módulo, conforme ilustrado na figura 3, abaixo. Um novo campo de texto, em branco, se abrirá.
Iniciando nosso programa, escolhemos o nome de “Cria_Abas”. Como estamos tratando de uma série de procedimentos, declaramos ao VBA que trataremos de uma Sub. Logo, a primeira linha do nosso código deve ser:
Sub Cria_Abas
Ao digitar o texto acima no campo em branco e dar “Enter”, note que este procedimento é “fechado” por meio da adição de um “End Sub” no fim do código. Como já dito em outras oportunidades, tudo que é aberto no VBA deve ser fechado, e os casos de Sub e Function são os poucos que o VBA faz automaticamente para você (não se acostume!).
Feito isso, delimitamos o nosso código. Quando pedirmos para o VBA executar este programa, ele procurará por Sub Cria_Abas e fará tudo que está entre o início e o fim do código.
A figura 4, abaixo, exemplifica o avanço até aqui.
Declarando Variáveis
Neste nosso exemplo, teremos apenas três variáveis a informar: o número de linhas que consultaremos (no caso, 15), a variável do For (que chamaremos de i) e o nome que a aba receberá.
Dessa forma, criaremos uma variável chamada lin_fin, que será marcada como Double, para que receba os possíveis valores de número de linhas. Além disso, criaremos a variável i, também Double. No código, fazemos isso incluindo a seguinte linha:
Dim lin_fin, i As Double
Para o nome da aba, precisaremos criar uma variável que possa receber textos. A mais comum é String. Dessa forma, criamos uma variável nome do tipo String, conforme abaixo:
Dim nome As String
A variável lin_fin não muda, é 15 para todo o código. Dessa forma, podemos já declará-la, logo no início. Caso o número de linhas a serem consultadas mude (vá para 150, por exemplo), basta entrarmos no código e fazer essa mudança.
A figura 5 ilustra o código com as linhas adicionais.
Uma ponderação importante: não é sempre que no início do programa já conhecemos todas as variáveis. As variáveis vão sendo declaradas conforme surge a necessidade ao longo da criação do código. Dessa forma, não se assuste e não se pressione em saber de modo antecipado tudo que precisará declarar. Isso vai ocorrendo naturalmente.
Informando para o VBA a repetição
Quando queremos fazer uma repetição de algum procedimento, a estrutura For é uma das mais indicadas.
Ela serve para repetir um determinado procedimento um determinado número de vezes (à escolha do usuário).
Caso queiramos que ela trabalhe com as informações de todas as células de A1 a A15 (nosso exemplo), devemos fazer um For que vá de 1 a 15, visitando a coluna A. Mais do que isso: devemos, por 15 vezes, criar uma aba e dar a essa aba um nome que tem ligação com o conteúdo da coluna A.
Como o For pensa
Se fossemos fazer o que precisamos de modo “manual”, executaríamos os procedimentos:
- Criamos uma nova aba
- Mudamos seu nome para (conteúdo da célula A1) + “_DRE”
- Criamos uma nova aba
- Mudamos seu nome para (conteúdo da célula A2) + “_DRE”
- Criamos uma nova aba
- Mudamos seu nome para (conteúdo da célula A3) + “_DRE”
- …
- …
- Criamos uma nova aba
- Mudamos seu nome para (conteúdo da célula A15) + “_DRE”
O grande ganho do uso da estrutura For é que todo o procedimento acima (que já é grande mas ainda tem algumas linhas “ocultas”), pode ser substituído por:
Para i = 1 a 15
- Criamos uma nova aba
- Mudamos seu nome para (conteúdo da célula “Ai”) + “_DRE”
Próximo i
Entenda: iniciamos o código na linha do “Para i = 1 a 15”. Executamos os procedimentos que estão dentro dele com i = 1 (no caso, visitaremos a célula A1). No fim, ele pede para voltarmos com o próximo i que é i = 2. Fazemos os procedimentos com i = 2 e assim sucessivamente até i = 15. Quando o i é 15 e encontramos o “Próximo i” o procedimento para pois o próximo i não está no intervalo permitido (de 1 a 15).
Aplicando o conceito no código
Para avançarmos em relação ao nosso código, precisamos saber como informar ao VBA a criação de uma nova aba e o procedimento de renomeá-la. Fizemos isso por meio das duas linhas, abaixo:
Sheets.Add After:=ActiveSheet ‘(1)
ActiveSheet.Name = nome ‘(2)
As linhas estão marcadas por (1) e (2). Colocamos o ‘ antes delas para que o Excel entenda que se trata de um comentário, caso você copie e cole.
O que elas fazem:
- (1) adiciona uma nova aba depois da aba atual. Note que ele usa o comando Sheets.Add para adicionar nova aba, e After:=ActiveSheet para determinar sua posição
- (2) muda o nome da aba atual para um determinado nome. No caso já aproveitamos e colocamos a ligação com a variável nome, que é a variável que receberá o nome que precisamos
Um detalhe crucial: quando criamos uma nova aba, essa aba fica ativa. É por isso que para renomear basta pedirmos para renomear a aba ativa (o que faz o código em (2)). Não podemos colocar nada no meio dessas duas linhas, pois qualquer procedimento adicional pode mudar a “aba ativa” e consequentemente deixar o nosso código sem utilização.
Conhecendo o que deve ser feito, basta adicionarmos as linhas no código:
For i = 1 To lin_fin
nome = Sheets(“Nomes”).Range(“A” & i) & “_DRE”
Sheets.Add After:=ActiveSheet
ActiveSheet.Name = nome
Next i
O que o código faz:
- A estrutura For/Next garante toda a repetição de 1 até lin_fin (no caso, 15). Logo, o que estará dentro dela será repetido com base nestes limites
- A linha que se inicia por “nome” aloca nessa variável o nome da aba que será criada
- Na variável “nome”, Sheets(“Nomes”).Range(“A” & i) é o conteúdo da célula Ai da aba “Nomes”. O comando Sheets(xxx) informa qual aba o valor deve ser consultado, enquanto Range(xxx) informa qual é a célula. Eles se conectam por meio de um “.”, antes do início de Range. Como queremos chegar na célula Ai, utilizamos o & para “concatenar” o conteúdo dentro de Range e fazer com que ele busque este conteúdo (já falamos sobre o uso do & voltado a Excel, o mesmo é válido para VBA)
- Uma vez encontrado o conteúdo da célula Ai, o & “_DRE” se encarrega de colocar, junto ao nome da filial, o “_DRE”
- As linhas Sheets.Add e ActiveSheet.Name já tratamos anteriormente
O código finalizado, já com esse procedimento colocado, fica como na figura 6, abaixo.
Rodando o código
Uma vez terminado o código, você até pode sair do VBA e voltar para o Excel.
Para rodar o código, basta selecionarmos Exibir > Macros > Exibir Macros, ou apertarmos Alt + F8. A figura 7 mostra o caminho para a abertura da janela.
Teremos então todas as macros que os arquivos em Excel abertos têm, inclusive a nossa “Cria_Abas”. Para executá-la, clique sobre o seu nome e vá em Executar, conforme figura 8.
Quando você faz isso, a sua macro é executada e os procedimentos são seguidos. Se tudo correu bem, você deve ver uma rápida agitação da sua planilha que se encerra após a criação das 15 abas. A figura 9 ilustra o resultado final.
Note que todas as abas que você precisava já foram rapidamente criadas. Em um caso onde temos a necessidade de criação de mais de 150 abas, como exemplo, vale muito a pena criar um programa do tipo.
Note também que este programa é de utilização “única”. Uma vez criadas as abas com os nomes no formato que queremos, não precisaremos executá-lo mais (a menos que mude a premissa do “_DRE” ou nome das filiais, por exemplo).
Tenha sempre este código na manga, pois ele é fundamental para que você ganhe tempo no dia-a-dia.
Mais importante que o código, entenda bastante a estrutura de repetição For, ela é uma das mais usadas quando programamos em Excel. Fixe!
Por fim, quem leu este artigo também se interessou pelos artigos abaixo! Clique para saber mais!
Transformar Linha em Coluna no Excel
Encontrando a primeira célula vazia de um intervalo
Quer aprender mais?
Assim, encerramos o nosso artigo! Hoje você aprendeu sobre as principais estruturas do VBA na resolução de um problema real: a criação de várias abas de uma vez só.
Ainda assim, você acredita que pode saber mais de VBA? Pois eu te apresento uma oportunidade única. O nosso Minicurso de VBA – Transformando Minutos em Segundos é o melhor caminho para você sair do zero em VBA e começar a criar suas próprias automações em Excel. Não perca essa oportunidade e dê uma olhada, clicando no link abaixo!