Artigo original: Excel VBA Tutorial – How to Write Code in a Spreadsheet Using Visual Basic
Introdução
Este é um tutorial sobre escrever código nas planilhas do Excel usando Visual Basic for Applications (VBA).
O Excel é um dos produtos mais populares da Microsoft. Em 2016, o CEO da Microsoft disse: "Pense em um mundo sem o Excel. Para mim, é impossível." Bem, talvez o mundo nem consiga pensar sem o Excel.
- Em 1996, havia mais de 30 milhões de usuários do Microsoft Excel (fonte).
- Hoje, a estimativa é de 750 milhões de usuários do Microsoft Excel. É um pouco mais do que a população da Europa e 25 vezes mais usuários do que em 1996.
Somos uma grande família feliz!
Neste tutorial, você aprenderá sobre o VBA e sobre como escrever código nas planilhas do Excel usando o Visual Basic.
Pré-requisitos
Você não precisa de experiência em programação para entender este tutorial. No entanto, você precisa de:
- Familiaridade básica ou intermediária com o Microsoft Excel
- Acesso ao Microsoft Excel, especialmente se quiser acompanhar os exemplos de VBA deste artigo - de preferência, uma versão dos últimos 3 anos (posterior a 2019), mas o Excel 2016 e o Excel 2013 já servirão.
- Vontade de aprender coisas novas
Objetivos de aprendizagem
Durante o curso deste artigo, você aprenderá:
- O que é o VBA
- Por que você deveria usar o VBA
- Como configurar o Excel para escrever código em VBA
- Como resolver problemas do mundo real com o VBA
Conceitos importantes
Aqui temos alguns conceitos importantes com os quais você deve se familiarizar para entender este tutorial por completo.
Objetos: o Excel é orientado a objetos, o que significa que tudo nele é um objeto - a janela do Excel, a planilha, a pasta, o gráfico, a célula, enfim. O VBA permite aos usuários manipular e realizar ações com os objetos em Excel.
Se você não tiver experiência com a programação orientada a objetos e se esse conceito for totalmente novo para você, dedique um tempo a entender bem o que isso significa!
Procedimentos: um procedimento é um pedaço de código em VBA, escrito no Visual Basic Editor, e que realiza uma tarefa. Às vezes, também nos referimos aos procedimentos usando a expressão macro (veja abaixo mais a respeito das macros). Existem dois tipos de procedimentos:
- Sub-rotinas: um grupo de instruções em VBA que realiza uma ou mais ações
- Funções: um grupo de instruções em VBA que realiza uma ou mais ações e que retorna um ou mais valores
Observação: você poderá ver funções operando dentro de sub-rotinas. Veremos isso mais tarde.
Macros: se você já passou algum tempo aprendendo sobre funcionalidades avançadas do Excel, provavelmente já ouviu falar sobre o conceito de "macro". Os usuários do Excel podem gravar macros, que consistem em comandos/pressionamentos de tecla/cliques do usuário, e que executam rapidamente para realizar tarefas repetitivas. As macros gravadas geram código em VBA, o qual você pode examinar. É bastante divertido, na verdade, gravar uma macro simples e verificar em seguida o código em VBA.
Leve em consideração que, algumas vezes, pode ser mais fácil e rápido gravar uma macro do que escrever um procedimento em VBA "na mão".
Por exemplo, talvez você trabalhe em gerenciamento de projetos. Uma vez por semana, você precisa transformar um relatório bruto exportado de seu sistema de gerenciamento de projetos em um relatório limpo e com uma formatação bem feita para os seus líderes. Você precisa formatar os nomes dos projetos que estão com orçamento acima do especificado com texto vermelho e em negrito. Você pode gravar as alterações na formatação como uma macro e executá-la sempre que precisar fazer alterações.
O que é o VBA?
Visual Basic for Applications é uma linguagem de programação desenvolvida pela Microsoft. Todos os programas do pacote do Microsoft Office vem com a linguagem VBA incorporada sem custos adicionais. O VBA permite que usuários do Microsoft Office criem programas pequenos e que operam dentro dos programas do Microsoft Office.
Pense no VBA como se ele fosse um forno de pizza em um restaurante. O Excel é o restaurante. A cozinha vem com eletrodomésticos comerciais padrão, como refrigeradores grandes, fogões e fornos normais - todos esses são recursos padrão do Excel.
Mas, e se você quiser fazer uma pizza no forno a lenha? Não é possível fazer isso no forno comercial convencional. O VBA é esse forno a mais.

Delícia.
Por que usar o VBA no Excel?
Porque o forno a lenha é melhor, ora!
Ok, falando sério agora.
Muitas vezes, passamos muito tempo no Excel como parte de nossos empregos. O tempo no Excel anda de modo diferente, também. Dependendo das circunstâncias, 10 minutos no Excel podem parecer uma eternidade se você não consegue fazer o que você quer, enquanto 10 horas podem passar muito rápido se tudo correr bem. É nesse momento que você deveria se perguntar, e por que diabos eu estou passando 10 horas na frente do Excel?
Às vezes, esses dias são inevitáveis. Porém, se você está passando de 8 a 10 horas todos os dias na frente do Excel fazendo tarefas repetitivas, repetindo muitas vezes os mesmos processos, tentando limpar conteúdo vindo de outros usuários do arquivo, ou mesmo atualizando outros arquivos depois de alterações terem sido feitas no arquivo do Excel, um procedimento do VBA talvez seja a solução ideal para você.
Usar o VBA talvez seja uma boa ideia para você se você precisa:
- Automatizar tarefas repetitivas
- Criar maneiras fáceis para os usuários interagirem com suas planilhas
- Manipular grandes quantidades de dados
Como configurar o Excel para escrever código em VBA
Guia do desenvolvedor
Para escrever código em VBA, você precisa adicionar a guia Developer (Desenvolvedor, em português) à faixa de opções. A faixa, então, terá essa aparência:

Para adicionar a guia Developer (Desenvolvedor) à Faixa de Opções:
- Na guia File (Arquivo), acesse Options > Customize Ribbon (Opções > Personalizar Faixa de Opções).
- Em Customize the Ribbon (Personalize a Faixa de opções), no local que diz Main Tabs (Guias principais), marque a caixa de seleção Developer (Desenvolvedor).
Depois de exibir a guia pela primeira vez, ela permanece visível até que você desmarque a caixa de seleção ou precise reinstalar o Excel. Para obter mais informações, consulte a documentação de ajuda da Microsoft.
Editor de VBA
Navegue até a aba Developer (Desenvolvedor) e clique no botão Visual Basic . Uma nova janela se abrirá - este é o editor do Visual Basic. Para fins deste tutorial, você precisa apenas estar familiarizado com os painéis Project Explorer (Explorador de Projetos) e Project Properties (janela de Propriedades do Projeto).

Exemplos de VBA no Excel
Primeiro, vamos criar um arquivo para brincarmos um pouco.
- Abra um novo arquivo do Excel
- Salve-o como uma Pasta de Trabalho Habilitada para Macro do Excel (. xlsm)
- Selecione a guia Developer (Desenvolvedor)
- Abra o editor de VBA
Agora, vamos criar alguns exemplos fáceis e colocar você a escrever código em uma planilha usando o Visual Basic.
Exemplo nº 1: exibir uma mensagem quando os usuários abrirem a pasta de trabalho no Excel
No editor de VBA, selecione Insert -> New Module (Inserir -> Novo Módulo)
Escreva (não copie e cole) este código na janela Module (Módulo):
Sub Auto_Open()
MsgBox ("Welcome to the XYZ Workbook.")
End Sub
Salve, feche a pasta de trabalho e reabra-a. A caixa de diálogo abaixo será exibida.

Surpresa!
Como foi que isso aconteceu?
Dependendo de sua familiaridade com programação, você já deve ter adivinhado. Não é nada especificamente complexo aqui, mas muita coisa aconteceu:
- Sub (é a versão reduzida de "Subroutine"): lembre-se do que dissemos no começo: "um grupo de instruções em VBA que realiza uma ou mais ações".
- Auto_Open: esta é a sub-rotina específica. Ela executa seu código automaticamente quando o arquivo do Excel é aberto - esse é o evento que aciona o procedimento. Auto_Open será executada apenas quando a pasta de trabalho for aberta manualmente. Ela não executará quando a pasta de trabalho for aberta por código a partir de outra pasta de trabalho (Workbook_Open fará isso, saiba mais sobre a diferença entre os dois - texto em inglês).
- Por padrão, o acesso a uma sub-rotina é público. Isso significa que qualquer outro módulo pode usar essa sub-rotina. Todos os exemplos deste tutorial serão com sub-rotinas públicas. Se necessário, você pode declarar as sub-rotinas como privadas. Isso pode ser necessário em algumas situações. Saiba mais sobre modificadores de acesso das sub-rotinas (texto em inglês).
- msgBox: essa é uma função - um grupo de instruções em VBA que realiza uma ou mais ações e retorna um valor. O valor retornado é a mensagem "Welcome to the XYZ Workbook" ("Boas-vindas à pasta de trabalho XYZ").
Em resumo, essa é uma sub-rotina simples que contém uma função.
Quando eu posso usar isso?
Talvez você tenha um arquivo muito importante e que não é acessado com frequência (digamos, por exemplo, uma vez a cada trimestre), mas que é atualizado automaticamente por outro procedimento em VBA. Quando ele é acessado manualmente, é por muitas pessoas de diversos departamentos, de toda a empresa.
- Problema: na maior parte do tempo, quando os usuários acessam o arquivo, eles ficam confusos com a finalidade desse arquivo (o motivo de ele existir), como ele é atualizado com tanta frequência, quem faz sua manutenção e como eles devem interagir com o arquivo. Recém-contratados têm milhares de perguntas, sendo necessário respondê-las com muita frequência.
- Solução: criar uma mensagem para o usuário que contenha, de modo conciso, respostas para cada uma dessas perguntas frequentes.
Exemplos do mundo real
- Use a função MsgBox para exibir uma mensagem quando há um evento qualquer: quando o usuário fecha uma pasta de trabalho do Excel, quando uma impressão é feita, quando uma nova planilha é adicionada à pasta de trabalho e assim por diante.
- Use a função MsgBox para exibir uma mensagem quando o usuário precisar atender a determinadas condições antes de fechar uma pasta de trabalho do Excel
- Use a função InputBox para obter informações do usuário
Exemplo nº 2: permitir que o usuário execute outro procedimento
No editor de VBA, selecione Insert -> New Module (Inserir -> Novo Módulo)
Escreva (não copie e cole) este código na janela Module (Módulo):
Sub UserReportQuery()
Dim UserInput As Long
Dim Answer As Integer
UserInput = vbYesNo
Answer = MsgBox("Process the XYZ Report?", UserInput)
If Answer = vbYes Then ProcessReport
End Sub
Sub ProcessReport()
MsgBox ("Thanks for processing the XYZ Report.")
End Sub
Salve e navegue de volta à guia Developer (Desenvolvedor) do Excel e selecione a opção "Button" (Botão). Clique em uma célula e atribua a macro UserReportQuery ao botão.
Agora, clique no botão. A mensagem a seguir será exibida:

Clique em "Yes" (Ou "Sim") ou pressione Enter.

Mais uma vez, surpresaaaa!
Observe que a sub-rotina secundária, ProcessReport, pode ser qualquer coisa. Demonstrarei algumas outras possibilidade no exemplo nº 3. Mas antes...
Como foi que isso aconteceu?
Esse exemplo é uma extensão do exemplo anterior e já tem mais alguns elementos novos. Vamos examiná-los:
- Dim UserInput As Long: Dim é a abreviação de "dimension" (dimensão) e permite que você declare nomes de variáveis. Neste caso, UserInput é o nome da variável e Long é o tipo de dado. Em bom português, essa linha quer dizer: "Temos aqui uma variável chamada "UserInput" (Entrada do usuário), do tipo Long".
- Dim Answer As Integer: declara outra variável chamada "Answer" (Resposta), do tipo Integer. Saiba mais sobre os tipos de dados aqui.
- UserInput = vbYesNo: atribui um valor à variável. Neste caso, vbYesNo, que exibe botões dizendo Yes (ou Sim) e No (ou Não). Existem muitos tipos de botão. Saiba mais aqui.
- Answer = MsgBox(“Process the XYZ Report?”, UserInput): atribui o valor da variável Answer à função MsgBox e a variável UserInput. Sim, uma variável dentro de uma variável.
- If Answer = vbYes Then ProcessReport: essa é uma "instrução if", uma instrução condicional, que nos permite dizer que, se x for verdadeiro, faça y. Neste caso, se o usuário selecionou "Yes" (ou Sim), execute a sub-rotina ProcessReport.
Quando eu posso usar isso?
Isso pode ser usado de diversas maneiras. O valor e a versatilidade dessa funcionalidade é, em grande parte, definido pelo que a sub-rotina secundária é capaz de fazer.
Por exemplo, você talvez tenha um arquivo usado para gerar 3 relatórios semanais diferentes. Esses relatórios são formatados de maneiras sensivelmente diferentes.
- Problema: cada vez que um desses relatórios precisa ser gerado, um usuário abre o arquivo e altera a formatação, os gráficos e assim por diante. Esse arquivo está sendo editado extensivamente, ao menos 3 vezes por semana, levando pelo menos 30 minutos por edição.
- Solução: criar 1 botão por tipo de relatório, que reformate automaticamente os componentes necessários dos relatórios e gere os gráficos exigidos.
Exemplos do mundo real
- Crie uma caixa de diálogos para que o usuário preencha automaticamente algumas informações de diversas planilhas
- Use a função InputBox para obter informações do usuário, que são, então, preenchidas nas diversas planilhas
Exemplo nº 3: adicionar números a um intervalo com um laço For-Next
Laços for são bastante úteis quando você precisa realizar tarefas repetitivas em um intervalo específico de valores - arrays ou intervalos de células. Em bom português, um laço diz "para cada um dos x, faça y".
No editor de VBA, selecione Insert -> New Module (Inserir -> Novo Módulo)
Escreva (não copie e cole) este código na janela Module (Módulo):
Sub LoopExample()
Dim X As Integer
For X = 1 To 100
Range("A" & X).Value = X
Next X
End Sub
Salve e navegue até a guia Developer (Desenvolvedor) do Excel e selecione o botão Macros. Execute a macro LoopExample.
Isso é o que deve acontecer:

E assim por diante, até a 100ª linha.
Como foi que isso aconteceu?
- Dim X As Integer: declara a variável X como um tipo Integer.
- For X = 1 To 100: esse é o início do laço for. De modo simples, essa linha informa ao laço que ele deve seguir repetindo até que X = 100. X é o contador. O laço seguirá em execução até que X = 100, executará uma última vez e será interrompido.
- Range("A" & X).Value = X: essa linha declara o intervalo do laço e o que colocar naquele intervalo. Como X = 1 inicialmente, a primeira célula será A1, ponto no qual o laço inserirá X na célula.
- Next X: isso informa ao loop que execute novamente
Quando eu posso usar isso?
O laço For-Next é uma das funcionalidades mais poderosas do VBA; existem milhares de casos de uso em potencial. Esse é um exemplo mais complexo, que exigiria diversas camadas de lógica, mas que comunica o universo de possibilidades dos laços For-Next.
Talvez você tenha uma lista de todos os produtos vendidos em sua padaria na coluna A, o tipo de produto na coluna B (bolos, sonhos ou bolinhos), o custo dos ingredientes na coluna C e o custo médio do mercado para cada tipo de produto em outra planilha.
Você precisa descobrir qual seria o preço de varejo de cada produto. Você imagina que deva ser o custo dos ingredientes mais 20%, mas que também seja 1,2% abaixo da média do mercado, se possível. Um laço For-Next permitiria a você fazer esse tipo de cálculo.
Exemplos do mundo real
- Use um laço com uma instrução if aninhada para adicionar valores específicos a um array em separado somente se eles (os valores) atenderem a determinadas condições
- Realize cálculos matemáticos em cada valor em um intervalo, por exemplo, calcular valores a cobrar adicionais e adicioná-los ao valor inicial
- Percorrer em laço cada caractere de uma string e extrair todos os números
- Selecionar aleatoriamente uma certa quantidade de números de um array
Conclusão
Agora que falamos sobre pizza e bolinhos e sobre como escrever código em VBA nas planilhas do Excel, é hora de verificar o aprendizado. Veja se você consegue responder às questões abaixo.
- O que é o VBA?
- Como eu configuro o Excel para começar a usar o VBA?
- Por que e quando eu deveria usar o VBA?
- Quais são alguns dos problemas que eu poderia resolver com o VBA?
Se você já tem uma boa ideia de como responder a essas questões, a missão deste artigo foi um sucesso.
Você pode ser um usuário normal ou um "power user" (usuário avançado, em inglês). Seja como for, espero que este tutorial tenha trazido informações úteis sobre o que você pode fazer com um mínimo de código em suas planilhas do Excel.
Feliz programação!
Recursos de aprendizagem
- Programando Excel VBA para leigos, de John Walkenbach
- Introdução ao VBA no Office, documentação da Microsoft
- Learning VBA in Excel, Lynda (site em inglês)
Sobre a autora
Chloe Tucker é uma artista e desenvolvedora, residente em Portland, Oregon. Já tendo sido uma educadora no passado, ela busca continuamente uma intersecção entre a aprendizagem e o ensino, bem como entre a tecnologia e a arte. entre em contato com ela pelo Twitter @_chloetucker e confira o site da web da autora no endereço chloe.dev.