Introdução a macros e VBA
Como começar com Excel VBA
Lista de códigos usados com frequência
Resumimos os preparativos para começar a escrever VBA e os códigos básicos que são frequentemente usados. Apresentaremos exemplos que você pode copiar e experimentar, incluindo especificação de célula/intervalo, variáveis, ramificação condicional, repetição e como escrever funções.
Se você quiser saber o que são macros e VBA, consulte Artigo de introdução de Macros/VBA primeiro.
Preparando o ambiente de Programador (Windows)
Você não precisa de nenhum outro software para escrever VBA. Escreva em VBE(Visual Basic Editor) no Excel e execute como está. Primeiro, prepare o seguinte apenas uma vez.
1. Mostre a guia do desenvolvedor
Abra “Ficheiro” → “Opções” → “Personalizar Faixa de Opções”, marque “Desenvolvedor” na lista de “Guias Principais” à direita e pressione “OK”. Uma guia “Desenvolvedor” aparecerá na faixa de Opções.
2. Abra o VBE
Clique em “Visual Basic” na guia “Desenvolvedor”.Alt+F11Mas posso abri-lo. Pressioná-lo novamente retornará à tela do Excel.
3. Adicione módulo padrão
Selecione "Inserir" → "Módulo Padrão" no menu VBE. O "Módulo1" será criado no projeto à esquerda e você poderá escrever o código à direita. Macros comuns são escritas neste módulo padrão.
4. Ative "Forçar declaração de variável"
Marque "Forçar declaração de variável" na guia "Ferramentas" → "Opções" → "Editar" do VBE. A linha a seguir é inserida automaticamente no início do módulo recém-criado e uma mensagem de erro será exibida para informá-lo se você digitou incorretamente o nome de uma variável.
Option Explicit ' Coloque no início do módulo para exigir a declaração de variáveis com Dim.5. Escreva e execute
Após escrever o código, clique dentro de Sub ~ End Sub e pressione "▶" (Sub/Run User Form) na barra de ferramentas, ouF5Pressione Na tela do Excel, clique em "Macros" (Alt+F8) para selecionar um nome e executá-lo.
Se você quiser verificar valores intermediários, vá em "Visualizar" → "Janela Imediata" do VBE (Ctrl+G) e escreva "Nome da variável Debug.Print" no código, o valor aparecerá lá.
6. Salvar como pasta de trabalho habilitada para Macros (.xlsm)
Para a pasta de trabalho na qual você escreveu o VBA, selecione "Pasta de trabalho habilitada para Macros do Excel (*.xlsm)" em "Salvar como". Se você salvá-lo como um arquivo .xlsx normal, o código que você escreveu será perdido.
Ao abrir a pasta de trabalho, se receber uma mensagem dizendo "Aviso de segurança: as macros foram desativadas", clique em "Ativar conteúdo" somente se a pasta de trabalho for uma que você criou ou confia. As macros podem ser bloqueadas em arquivos salvos por e-mail ou pela Internet. Nesse caso, clique com o botão direito no Ficheiro → selecione “Propriedades” e marque “Permitir”.
As alterações feitas usando uma Macros não podem ser desfeitas usando Ctrl+Z.Ao testar, use uma cópia da apostila ou dos dados práticos.
Para Mac, exiba a guia do desenvolvedor selecionando o menu "Excel" → "Preferências" → "Faixa e barra de ferramentas" e abra o VBE no "Visual Basic" na guia do desenvolvedor.
Pratique usando o navegadorPratique desde a exibição da guia de Programador até a Executar do código →Uma lista de referência rápida de códigos usados com frequência
Se você conseguir ler tanto, poderá ler muitas das macros gravadas e códigos criados pela IA. Instruções detalhadas para cada um são apresentadas nas seções abaixo.
| Como escrever | significado |
|---|---|
| Sub MacroName() 〜 End Sub | O início e o fim de uma Macros (procedimento) |
| ' Comentário | ' Notas que não são executadas até o final da linha |
| Dim item As Long | Prepare uma variável (Long é um número inteiro) |
| Set item = Worksheets("contagem") | Coloque planilhas, células, etc. em variáveis |
| Range("A1") | Célula A1 |
| Range("A1:C5") | Faixa de A1 a C5 |
| Cells(row, column) | Especifique células por número de linha/coluna |
| Cells(Rows.Count, 1).End(xlUp).Row | A última linha com dados na coluna A |
| .Value | valor da célula |
| If condition Then 〜 End If | Executar somente quando as condições forem atendidas |
| For i = 1 To 10 〜 Next i | repita um determinado número de vezes |
| For Each item In targetRange 〜 Next | Processar células no intervalo, uma por uma |
| Function MacroName() … End Function | Função caseira que retorna um valor |
| WorksheetFunction.Sum(targetRange) | Usando funções de planilha com VBA |
| MsgBox "personagens" | mostrar mensagem |
Forma básica de Macros (Sub) e comentários
A Macros começa com "Sub Macros name()" e termina com "End Sub". Os comandos escritos durante esse período serão executados em ordem, de cima para baixo. O japonês também pode ser usado em nomes de macros.
Sub SayHello()
' Esta linha é comentada (não executada)
MsgBox "Olá"
End Sub「'"(aspas simples) no final da linha há um comentário. Escrever o que você está fazendo o ajudará a lê-lo mais tarde ou a passá-lo para outra pessoa.
Use "Chamar" para chamar outras macros.
Sub RunAll()
Call CheckSales ' chame outra Macros
Call SayHello
End SubComo escrever variáveis e constantes
Variáveis são caixas que armazenam valores que estão sendo calculados ou valores que são usados muitas vezes. Prepare-o com "Dim nome da variável como tipo" e insira o valor com "=".
Sub VariablesExample()
Dim total As Long ' inteiro
Dim customer As String ' corda
Dim price As Double ' números com decimais
Dim today As Date ' Data
Dim finished As Boolean ' Verdadeiro ou Falso
total = 12
customer = "Komorebi Shop"
price = 1200.5
today = Date
finished = False
Range("A1").Value = customer & ":" & total & "importa"
End Sub| molde | O que colocar |
|---|---|
| Long | Inteiro (número da linha, número de itens, etc.) |
| Double | Números incluindo decimais (valores, porcentagens, etc.) |
| String | corda |
| Date | Data/hora |
| Boolean | True / False |
| Variant | Qualquer coisa pode caber (quando você não decide o tipo) |
| Worksheet / Range | Planilha/célula (inserir com conjunto) |
Ao armazenar "coisas" (objetos), como planilhas ou células em variáveis, adicione "Definir" no início. Se você esquecer de anexá-lo, ocorrerá um erro, que é onde frequentemente tropeço.
Dim ws As Worksheet
Set ws = Worksheets("contagem") ' Insira planilhas e células com Set
ws.Range("A1").Value = "Vendas totais"
Dim target As Range
Set target = ws.Range("A2:C10")
target.ClearContentsPara valores que não mudam durante o processo, como a alíquota do imposto sobre o consumo, se você usar "Const" para torná-lo uma constante, basta alterar um local ao alterá-lo.
Const TAX_RATE As Double = 0.1 ' Um valor que não muda durante o processo
Range("C2").Value = Range("B2").Value * (1 + TAX_RATE)Como especificar células/intervalos
A coisa mais comum de escrever em VBA é especificar células. 「Range("A1")" é o endereço da célula e "Células (linha, coluna)" é especificado por número.As células, que podem ser especificadas por número, são úteis ao mudar as linhas uma por uma durante a repetição.
Range("A1").Value = 100 ' A1
Range("A1:C3").Value = 0 ' Agrupados em A1-C3
Range("A:A").Font.Bold = True ' Coluna A inteira
Range("2:2").Font.Bold = True ' segunda linha inteira
Cells(2, 3).Value = "C2" ' 2ª linha/3ª coluna (C2)
Range(Cells(1, 1), Cells(5, 3)).Select ' A1〜C5
Worksheets("contagem").Range("A1").Value = "Total" ' Especifique a planilhaSe você não escrever um nome de planilha, a planilha que está aberta no momento (planilha ativa) será o alvo. Ao operar outra planilha, clique emWorksheets("nome da planilha").”na frente.
encontre a última linha
Para tabelas onde o número de linhas muda a cada mês, verifique a quantidade de dados existentes antes do processamento. Esta é uma forma de escrever para encontrar o número da linha da primeira célula que contém dados, começando na célula inferior da coluna A e subindo.
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Pesquise da parte inferior da coluna A até o topo
Range("A2:A" & lastRow).Font.Bold = True ' Da parte inferior do título até a última linhaTabela inteira/turno/expandir
Range("A1").CurrentRegion.Select ' Tabela inteira conectada a A1
Range("A1").Offset(1, 0).Value = "inferior" ' 1 linha abaixo (A2)
Range("A1").Offset(0, 2).Value = "certo" ' 2ª fila à direita (C1)
Range("A1").Resize(3, 2).Select ' 3 linhas x 2 colunas de A1 (A1:B3)Manipulação de valores, fórmulas e formatos
Os valores das células são lidos e gravados usando ".Value". Para a fórmula, insira a mesma string usada ao inseri-la no Excel em ".Formula".
Range("D2").Formula = "=B2*C2" ' insira a fórmula
Range("A2:D10").ClearContents ' Exclua apenas o valor (o formato permanece)
Range("A1").Font.Bold = True ' Negrito
Range("A1").Interior.Color = RGB(255, 242, 204) ' cor de preenchimento
Range("D2:D10").NumberFormat = "#,##0" ' Separador de 3 dígitos
Range("A1:D10").Copy Destination:=Worksheets("reserva").Range("A1") ' copie e coleRamificação condicional (If · Select Case)
Use "If ~ Then" para separar o processamento com base nas condições. Não se esqueça do “End If” no final.Use "ElseIf" para dividir a condição em várias condições e "Else" quando nenhuma das condições se aplicar.
If Range("B2").Value >= 80 Then
Range("C2").Value = "Aprovado"
ElseIf Range("B2").Value >= 60 Then
Range("C2").Value = "Reconfirmação"
Else
Range("C2").Value = "Falha"
End IfIf Range("A2").Value = "" Then
MsgBox "A2 está em branco"
End If
' E (ambos), Ou (qualquer um), <> (diferente)
If Range("B2").Value >= 60 And Range("C2").Value <> "Ausência" Then
Range("D2").Value = "OK"
End IfAo dividir em várias formas com base em um valor, "Selecionar caso" é mais fácil de ler.
Select Case Range("B2").Value
Case "Tóquio", "Yokohama"
Range("C2").Value = "Kanto"
Case "Osaca", "Quioto"
Range("C2").Value = "Kansai"
Case Else
Range("C2").Value = "Outro"
End SelectRepetir (For · For Each · Do While)
Executar o mesmo processamento para cada linha é onde o VBA mostra seu maior poder."For ~ Next" se repete enquanto a variável i é incrementada em 1.
Dim i As Long
For i = 2 To 10
Cells(i, 4).Value = Cells(i, 2).Value * Cells(i, 3).Value
Next iAo processar células em um intervalo ou planilhas em uma pasta de trabalho, uma por uma, use “For Each”.
Dim cell As Range
For Each cell In Range("A2:A10")
If cell.Value = "" Then
cell.Interior.Color = RGB(255, 199, 206) ' preencha os espaços em branco com vermelho
End If
Next cell
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets ' todas as folhas
ws.Range("A1").Font.Bold = True
Next wsSe a linha final não for determinada, use "Do While" para repetir, desde que as condições sejam atendidas.Se você esquecer "r = r + 1", não conseguirá parar.Quando não para,EscOuCtrl+BreakVocê pode interrompê-lo com .
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> "" ' Até a coluna A ficar em branco
Cells(r, 5).Value = "Confirmado"
r = r + 1
LoopFor i = 2 To 100
If Cells(i, 1).Value = "Total" Then Exit For ' sair no meio do caminho
Next iComo escrever e usar funções
Quando falamos em “funções” em VBA, existem três tipos:
Crie sua própria função (Função)
Se você criá-lo usando "Função", ele se tornará uma função que retorna o valor calculado. Se você colocar um valor no nome da função, esse será o resultado.Se você escrever em um módulo padrão, poderá inserir "=Valor incluindo impostos (A2)" em uma célula e usá-lo da mesma forma que uma função de planilha.
Function PriceWithTax(price As Double) As Double
PriceWithTax = price * 1.1 ' O valor que você coloca no nome da função se torna o resultado.
End Function
Sub UseFunction()
Range("B2").Value = PriceWithTax(Range("A2").Value)
End SubUsando funções de planilha com VBA
Funções usadas em células, como SUM e COUNTIF, podem ser chamadas com "WorksheetFunction".
Range("C11").Value = WorksheetFunction.Sum(Range("C2:C10"))
Range("C12").Value = WorksheetFunction.Average(Range("C2:C10"))
Range("C13").Value = WorksheetFunction.CountIf(Range("B2:B10"), "Tóquio")Funções VBA
O VBA também fornece funções que lidam com datas e strings.
Range("A1").Value = Format(Date, "yyyy-mm-dd") ' data de hoje em texto
Range("A2").Value = Now ' data e hora atuais
Range("A3").Value = Len("Komorebi Shop") ' Número de caracteres → 13
Range("A4").Value = Left("2026-10-06", 4) ' 4 caracteres da esquerda → 2026
Range("A5").Value = Replace("Tóquio Filial", "Filial", "") ' Substituir → Tóquio
Range("A6").Value = Trim(" Tóquio ") ' Apague os espaços antes e depoisMensagem e entrada (MsgBox · InputBox)
Usado para notificar o fim do processamento ou para confirmar antes da Executar. Se você usar "InputBox", poderá inserir o mês, responsável, etc. cada vez que executar o programa.
MsgBox "Acabou"
If MsgBox("Você quer executá-lo?", vbYesNo) = vbNo Then Exit Sub
Dim answer As String
answer = InputBox("Quantos meses?")
Range("A1").Value = answer & "Mensalmente"Operações de folhas/livros
Worksheets("Vendas").Activate ' trocar folhas
Worksheets("Vendas").Copy After:=Worksheets(Worksheets.Count) ' folha de cópia
ActiveSheet.Name = "Out" ' Alterar nome da planilha
Worksheets.Add After:=Worksheets(Worksheets.Count) ' adicionar planilha
Dim book As Workbook
Set book = Workbooks.Open(ThisWorkbook.Path & "\Tóquio_October.xlsx")
book.Close SaveChanges:=False ' Fechar sem salvar
ThisWorkbook.Save ' Salve esta pasta de trabalhoSe houver muito processamento a ser feito, você pode parar de atualizar a tela e ela terminará mais rápido. Você pode escrever o processo quando ocorrer um erro usando "On Error GoTo".
Sub RunFaster()
Application.ScreenUpdating = False ' Interromper atualizações de tela
' ...Processo que leva tempo...
Application.ScreenUpdating = True ' voltar para o último
End SubSub HandleErrors()
On Error GoTo ErrHandler
Worksheets("contagem").Range("A1").Value = "OK"
Exit Sub
ErrHandler:
MsgBox "Recebi um erro:" & Err.Description
End SubExemplo combinado: cálculo e coloração da tabela de vendas
Combinando o código até agora, obtemos o seguinte: Na planilha "Vendas", em uma tabela com o nome do produto na coluna A, a quantidade na coluna B e o preço unitário na coluna C, calcule o valor na coluna D e pinte as linhas de 100.000 ienes ou mais de verde.
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = Worksheets("Vendas")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
' Quantidade = Quantidade × Preço Unitário
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Se for superior a 100.000 ienes, é verde.
If ws.Cells(i, 4).Value >= 100000 Then
ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
Else
ws.Cells(i, 4).Interior.ColorIndex = xlNone
End If
Next i
MsgBox lastRow - 1 & "calculou a linha"
End SubContém variáveis (Dim), especificação de planilha (Set), linha final, repetição (For) e ramificação condicional (If). Se você puder ler "o que está sendo feito em qual célula" linha por linha, poderá alterar o número de linhas e as condições para se adequar à sua tabela.
Mesmo quando a IA cria o código, se você conseguir ler essa forma, poderá verificar por si mesmo qual coluna está sendo calculada e se as condições foram atendidas.
Saiba mais
Recomendamos verificar a lista de códigos para ver como escrevê-lo e depois experimentá-lo usando o Ficheiro do material didático. Este livro introdutório passo a passo permite que você pratique tudo, desde gravação de macros até variáveis, repetição e ramificação condicional com exemplos conectados.
Para quem se sente preso a fazer isso sozinho, ou para quem gostaria de discutir áreas de seu trabalho que podem ser automatizadas, fazer um curso ministrado por um instrutor também é uma opção.
A escolha de um método de estudo também é apresentada em Como estudar macros e VBA.