Excel, AI + Business Program · EBP
Excel, AI + Business Program
Do fundamento ao Excel moderno, da planilha ao modelo de decisão e da tarefa repetitiva à automação com Power Query, VBA e IA.
Disclaimer
Confidencial e exclusivoEste material foi elaborado como apoio às aulas e, portanto, não substitui a participação nas aulas nem representa registro completo do que foi abordado nelas.
O emprego de todas as logomarcas possui caráter estritamente ilustrativo, não indicando parceria, promoção ou qualquer vínculo entre as organizações citadas e a BTC.
Nenhuma das partes deste documento pode ser veiculada, transcrita ou reproduzida sob qualquer forma ou por quaisquer meios — eletrônico, fotocópia, gravação ou outros — sem prévio consentimento por escrito da BTC.
Módulo 1 · Tools · Capítulo 1
Fundamentos do Excel
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →O curso tem dois grandes blocos. No Tools você conhece as peças do Excel: telas, atalhos, fórmulas e as funções modernas. Na Modelagem você usa essas peças para montar modelos que resolvem problemas de negócio. Uma boa imagem é a de um balde de Lego: primeiro você vira o balde e conhece cada peça; depois aprende a montar algo útil com elas. Este capítulo é o primeiro contato com o balde. O assunto é básico, mas é a base de todo o resto: quem se move pela planilha com segurança, pelo teclado, constrói e audita modelos muito mais rápido.
O objetivo também não é decorar um dicionário de funções. É aprender a "falar a língua" do Excel: combinar poucas peças bem escolhidas para responder a uma pergunta. Por isso, desde a primeira aula, o curso já usa o Excel moderno, com fórmulas que devolvem um intervalo inteiro (as matrizes dinâmicas), Tabelas e nomes.
- Reconhecer os elementos da tela do Excel e deixar o programa configurado para trabalhar bem.
- Navegar, selecionar, digitar e editar usando o teclado.
- Inserir, excluir, ocultar e agrupar linhas e colunas sem desalinhar a base.
- Formatar números, moedas, percentuais e datas, inclusive com formatos personalizados.
- Escrever as primeiras fórmulas com operadores, referências relativas e absolutas, SOMA, MÉDIA, MÁXIMO, MÍNIMO, CONT.NÚM e SE.
- Entender o que é uma fórmula que "derrama" (spill) e usar a referência de despejo
#. - Criar um menu suspenso com validação de dados.
1.1A tela do Excel
Antes de qualquer fórmula, vale conhecer o vocabulário da tela. São esses nomes que aparecem nas dicas, nos menus e nas buscas de ajuda.
| Elemento | Onde fica | Para que serve |
|---|---|---|
| Faixa de Opções | Topo da janela, organizada em guias (Página Inicial, Inserir, Fórmulas, Dados...) | Reúne todos os comandos |
| Barra de Ferramentas de Acesso Rápido | Acima ou abaixo da Faixa de Opções | Atalhos para os comandos que você mais usa |
| Caixa de Nome | À esquerda da Barra de Fórmulas | Mostra o endereço da célula ativa e leva a qualquer endereço digitado |
| Barra de Fórmulas | Ao lado da Caixa de Nome | Mostra e edita o conteúdo da célula ativa |
| Cabeçalhos | Letras no alto (colunas) e números à esquerda (linhas) | Identificam o endereço e selecionam linhas e colunas inteiras |
| Guias de planilha | Na base da janela | Cada aba é uma planilha da pasta de trabalho |
| Barra de status | Rodapé | Soma, média e contagem rápidas da seleção; zoom; modos |
Tabela 1.1. Elementos da tela do Excel.
A Caixa de Nome é mais útil do que parece. Digite G10 e tecle Enter para ir até a célula G10; digite B2:B5 para selecionar esse intervalo. Quando há um intervalo selecionado, ela mostra apenas a primeira célula.
O cursor do mouse também "fala". A cruz branca seleciona células; a seta preta sobre um cabeçalho seleciona a coluna ou a linha inteira; a seta dupla entre dois cabeçalhos ajusta a largura ou a altura. Na borda inferior da Barra de Fórmulas, a seta dupla aumenta a altura da barra, recurso útil para ler fórmulas longas.
Em Arquivo › Opções:
- Geral › Incluir este número de planilhas: 1. Pasta nova com uma aba só; as outras você cria quando precisar. Na mesma tela se definem a fonte e o tamanho padrão.
- Avançado › desmarcar "Permitir edição diretamente nas células". Assim o F2 leva a edição para a Barra de Fórmulas, que é sempre o mesmo lugar para ler uma fórmula, em vez de editá-la dentro da célula.
- Fórmulas › desmarcar "Usar funções GetPivotData para referências de tabela dinâmica". Evita que um clique numa tabela dinâmica gere uma fórmula longa no lugar da referência simples.
- Personalizar Faixa de Opções › marcar a guia Desenvolvedor. Ela será usada no módulo de automação (VBA).
A Barra de Ferramentas de Acesso Rápido pode ser personalizada pela setinha ao lado dela, em Mais Comandos: adicione, reordene ou remova botões. Cada botão ganha um número que funciona com Alt: se Salvar for o primeiro, Alt 1 salva o arquivo.
Recursos extras que se ativam em Arquivo › Opções › Suplementos › Gerenciar: Suplementos do Excel (por exemplo, Ferramentas de Análise e Solver) ou em Página Inicial › Suplementos (assistentes de IA, entre outros). O Solver será ativado no módulo de Modelagem; deixá-lo ligado sem necessidade torna o Excel mais pesado.
Pasta de trabalho, planilha, célula e intervalo
- Pasta de trabalho é o arquivo (
.xlsx). - Planilha é cada aba da pasta.
- Célula é o cruzamento de uma coluna com uma linha, identificada pelo endereço:
B3é a coluna B, linha 3. - Intervalo é um conjunto de células, escrito com dois-pontos:
A1:C10vai de A1 até C10.
- .xlsx: o padrão, sem macros.
- .xlsm: aceita macros (VBA). Não abra um
.xlsmde origem desconhecida. - .xls: formato antigo (até o Excel 2003), que alguns sistemas ainda exportam.
- .csv: texto separado por vírgula ou ponto e vírgula, comum em exportações de sistemas. Volta no módulo de Power Query.
Ctrl+S (Ctrl+B no Excel em português) salva; F12 abre o Salvar Como, onde se escolhe o formato, inclusive PDF.
1.2Navegar e selecionar pelo teclado
O mouse é ótimo para explorar, mas lento para trabalhar. Os atalhos abaixo resolvem a maior parte da navegação.
| Atalho | O que faz |
|---|---|
| Ctrl+setas | Vai até o fim do bloco de dados naquela direção |
| Ctrl+Shift+setas | Seleciona até o fim do bloco de dados |
| Shift+setas | Estende a seleção célula a célula |
| Ctrl+Home / Ctrl+End | Vai para A1 / para a última linha e coluna com dados |
| Ctrl+Espaço | Seleciona a coluna inteira |
| Shift+Espaço | Seleciona a linha inteira |
| Ctrl+clique | Acrescenta à seleção um intervalo que não está ao lado |
| Page Up / Page Down | Rola uma tela para cima ou para baixo |
| Alt+Page Up / Page Down | Rola uma tela para a esquerda ou para a direita |
| Ctrl+Page Up / Page Down | Vai para a aba anterior / seguinte |
| F5 ou Caixa de Nome | Vai para um endereço |
Tabela 1.2. Atalhos de navegação e seleção. Em notebooks, Page Up, Page Down, Home e End podem exigir a tecla Fn.
Ctrl+seta para na última célula preenchida antes de uma célula vazia. Se a base tem linhas em branco no meio, o atalho para antes do fim, e uma seleção feita com Ctrl+Shift+seta fica incompleta. Confira o endereço na Caixa de Nome antes de copiar ou somar.
Pergunta: qual a soma, a média e a quantidade de preços da base?
- Clique em F6, o primeiro preço.
- Tecle Ctrl+Shift+↓. A seleção vai até F56, e a Caixa de Nome mostra o intervalo enquanto você seleciona.
- Leia a barra de status: Soma: 2.203,47 · Média: 43,21 · Contagem: 51.
A barra de status é a calculadora mais rápida do Excel para conferir um número. Clique nela com o botão direito para escolher o que aparece (Mínimo, Máximo, Contagem Numérica...). Para guardar o resultado na planilha, aí sim, escreva a fórmula.
Ir Para Especial
O F5 abre a janela Ir Para. Ela guarda a última referência usada, então F5 seguido de Enter alterna entre duas células distantes. O botão Especial… seleciona células por tipo: Em branco, Constantes (números, texto, lógicos), Fórmulas e outros.
- Selecione a base.
- F5 › Especial… › Em branco › OK. Só as células vazias ficam selecionadas.
- Digite
0e tecle Ctrl+Enter.
O Ctrl+Enter grava o mesmo conteúdo em todas as células selecionadas de uma vez. Funciona também com fórmulas.
O professor usa o mesmo zoom em todas as abas (Ctrl+roda do mouse) e salva o arquivo com o cursor em A1 em cada aba, para quem abrir começar pelo topo. Também deixa uma margem fina, igual em todas as abas: linha 1 baixa e coluna A estreita. Os arquivos de exercício do curso seguem esse padrão.
1.3Digitar, editar e preencher
| Tecla | O que faz |
|---|---|
| Enter | Confirma e desce |
| Tab | Confirma e vai para a direita |
| Esc | Cancela a digitação |
| F2 (ou duplo clique) | Edita a célula sem apagar o conteúdo |
| Alt+Enter | Quebra linha dentro da célula ou da fórmula |
| Ctrl+C / X / V | Copiar / recortar / colar |
| Ctrl+Alt+V | Colar especial |
| Ctrl+Z / Ctrl+Y | Desfazer / refazer |
| Alça de preenchimento | O quadradinho no canto da seleção: arraste para copiar ou criar séries (1, 2, 3...; jan, fev, mar...) |
Tabela 1.3. Entrada, edição e cópia. No Excel em português, Ctrl+Z e Ctrl+Y são os mesmos; Ctrl+T, porém, cria Tabela (equivale ao Ctrl+A do Excel em inglês).
Dentro de uma célula em edição, as setas andam caractere a caractere; Ctrl+setas pulam blocos de texto; Shift+setas selecionam trechos. Para sair da fórmula e apontar uma célula com as setas, tecle F2 de novo: ele alterna entre "editar o texto" e "apontar células".
Selecione uma célula com fórmula, tecle F2 e depois Esc. O Excel ilumina, com cores, as células que a fórmula usa, e o Esc sai sem alterar nada. É a forma mais rápida de auditar de onde vem um número.
Colar especial
O Ctrl+Alt+V abre o Colar Especial. Os usos mais comuns:
- Valores: cola só o resultado, sem a fórmula. Útil para "congelar" um número.
- Fórmulas: cola a fórmula sem trazer a formatação da origem.
- Formatos: cola só a aparência. Equivale ao Pincel de Formatação.
- Operação › Adicionar: soma o valor copiado ao destino. Copiar um
0e colar como Valores + Adicionar sobre números gravados como texto converte esses textos em números.
Fórmulas longas legíveis
Ao digitar uma função, o Excel sugere nomes compatíveis. Escolha com as setas e tecle Tab: ele completa o nome e abre o parêntese. Feche sempre os parênteses antes do Enter; o Excel tenta completar sozinho, mas pode errar em fórmulas complexas.
Fórmulas longas ficam muito mais fáceis de ler quando quebradas em linhas com Alt+Enter, com espaços para alinhar os argumentos, como parágrafos de um texto:
=SOMASES(tbl_Vendas[Qtd];
tbl_Vendas[Região]; $C$6;
tbl_Vendas[Produto]; $C$7)
Essa função e as Tabelas aparecem no Capítulo 2. O ponto aqui é o formato: aumente a altura da Barra de Fórmulas e escreva para quem vai ler depois.
1.4Linhas, colunas e formatação
Inserir, excluir e mover sem desalinhar
| Atalho | O que faz |
|---|---|
| Ctrl++ | Insere linhas ou colunas (em muitos teclados: Ctrl+Shift+=) |
| Ctrl+- | Exclui linhas ou colunas |
| Ctrl+9 / Ctrl+0 | Oculta linhas / colunas |
| Alt+Shift+→ / ← | Agrupa / desagrupa |
| Duplo clique na borda do cabeçalho | Autoajusta a largura da coluna (ou a altura da linha) |
Tabela 1.4. Linhas e colunas.
Com apenas uma célula selecionada, Ctrl++ abre uma janela que oferece "deslocar células para a direita" ou "para baixo". Essas opções empurram só um pedaço da base e desalinham as linhas: o preço de um item vai parar na linha de outro. Selecione antes a linha (Shift+Espaço) ou a coluna (Ctrl+Espaço) e só então use Ctrl++ ou Ctrl+-. É mais rápido e não tem risco.
Para mover um bloco de linhas para outro ponto da base, selecione as linhas, recorte com Ctrl+X, selecione a linha de destino e, em vez de Ctrl+V, use Ctrl++. O Excel insere as linhas recortadas ali, sem sobrescrever nada. Com Ctrl+C no lugar do Ctrl+X, o bloco é duplicado.
Situação: na tabela da F2_Digitar, a ordem deve começar pelo item mais caro, a Mochila (linha 8).
- Clique em B8 e tecle Shift+Espaço: a linha 8 inteira fica selecionada.
- Ctrl+X. Aparece o contorno pontilhado em volta da linha.
- Clique em B6 (Caderno), tecle Shift+Espaço e depois Ctrl++.
Resultado: Mochila passa para a linha 6, e Caderno e Caneta descem para as linhas 7 e 8, sem sobrescrever nada. As fórmulas que apontam para a linha movida acompanham a mudança: o total geral continua R$ 361,35.
Ocultar ou agrupar
Ocultar linhas e colunas serve para organizar a visão: tirar do caminho o que o usuário não precisa ver. O Excel deixa uma pista visual (a numeração pula de 13 para 15, por exemplo), e para reexibir basta selecionar as linhas ao redor, clicar com o botão direito e escolher Reexibir.
Linhas, colunas e abas ocultas podem ser reexibidas por qualquer pessoa que receba o arquivo. Senhas de planilha e travas mais elaboradas também são contornáveis por quem conhece um pouco mais de Excel. Regra prática: se uma informação não deve ser enviada, ela não deve estar no arquivo.
Quando você vai mostrar e esconder o mesmo trecho com frequência (por exemplo, colunas de detalhe que não devem sair na impressão), prefira Dados › Agrupar (Alt+Shift+→). O agrupamento cria botões de + e – e níveis numerados na margem, que abrem e fecham o trecho com um clique.
Atalhos com Alt em sequência
Tecle Alt e solte: aparecem letras sobre cada guia da Faixa de Opções. Digitando as letras em sequência, você chega a qualquer comando sem o mouse. Alguns exemplos no Excel em português:
| Sequência | Comando |
|---|---|
| Alt C 0 / Alt C 9 | Aumentar / diminuir casas decimais |
| Alt S V V | Validação de Dados |
| Alt+↓ (sobre um filtro) | Abre a lista do filtro; Espaço marca ou desmarca itens |
Tabela 1.5. Exemplos de atalhos com Alt. As letras mudam com o idioma do Excel: a guia Página Inicial é C em português e H em inglês (Alt H 0 / Alt H 9; Alt A V V).
Dentro de um menu aberto por Alt, as setas navegam, Tab desce um nível, Shift+Tab sobe e Enter confirma. A mesma lógica vale na janela Formatar Células.
O professor recomenda escolher um idioma do Excel e não trocar mais, porque os atalhos com Alt e os nomes das funções mudam. Ele usa o Excel em inglês: VBA e Power Query são escritos em inglês e há mais material de estudo nesse idioma. Esta apostila escreve as funções em português, com o nome em inglês entre parênteses na primeira vez. Uma fórmula escrita no idioma errado devolve o erro #NOME?.
Formatar números
O Ctrl+1 abre Formatar Células, onde estão todos os formatos: Geral, Número, Moeda, Contábil, Data, Hora, Porcentagem e Personalizado. Para os formatos mais comuns, há atalhos diretos:
| Atalho | Formato |
|---|---|
| Ctrl+Shift+1 | Número com separador de milhar e 2 casas |
| Ctrl+Shift+2 | Hora |
| Ctrl+Shift+3 | Data |
| Ctrl+Shift+4 | Moeda |
| Ctrl+Shift+5 | Porcentagem |
Tabela 1.6. Atalhos de formatação de número.
O formato muda só a aparência. O valor guardado na célula continua o mesmo, e é ele que entra nas contas. Uma célula que mostra R$ 74,70 contém 74,7.
O formato Personalizado permite escrever o código de exibição. Ele tem até quatro partes separadas por ponto e vírgula: positivo; negativo; zero; texto.
| Código | 1234,5 | −1234,5 | 0 |
|---|---|---|---|
#.##0 |
1.235 | −1.235 | 0 |
#.##0,00;[Vermelho](#.##0,00) |
1.234,50 | (1.234,50) em vermelho | 0,00 |
#.##0;(#.##0);"-" |
1.235 | (1.235) | - |
0"x" |
1235x | −1235x | 0x |
Tabela 1.7. Exemplos de formatos personalizados. O texto entre aspas aparece na tela, mas a célula continua numérica.
O formato 0"x" é um bom exemplo da diferença entre valor e exibição: a célula mostra "3x" (um múltiplo, por exemplo) e continua servindo em contas. Se você digitasse o texto "3x", qualquer conta com ele daria erro #VALOR!. O traço no lugar do zero (terceira parte do código) deixa relatórios mais limpos.
Situação: o faturamento total da base F1_Explorar é 48.497,19 e o relatório deve mostrá-lo em milhares.
- Selecione a célula e abra Ctrl+1 › Personalizado.
- Digite o código
#.##0,0." mil"e confirme.
Resultado: a célula mostra 48,5 mil. O ponto no fim da parte numérica divide a exibição por mil; o valor guardado continua 48.497,19, e qualquer conta com a célula usa o número inteiro. A alternativa, criar uma coluna com =B2/1000, duplica a informação e arredonda as contas seguintes.
Datas são números
O Excel guarda cada data como um número inteiro: o dia 1 é 01/01/1900, e cada dia seguinte soma 1. A data de 22/08/2026, por exemplo, é o número 46.256; formate essa célula como Geral e é isso que aparece. A hora é a fração do dia: 0,5 é meio-dia.
Como data é número, dá para fazer contas com ela:
=HOJE()+100 → a data daqui a 100 dias
=DATA(2026;12;31)-HOJE() → quantos dias faltam para o fim do ano
Com HOJE() = 22/08/2026, a primeira fórmula devolve 30/11/2026 e a segunda, 131 dias.
Situação: uma venda feita em 19/04/2025 (em A2) tem prazo de pagamento de 30 dias (em B2).
C2: =A2+B2 → 19/05/2025 (vencimento)
D2: =C2 → formato dddd: segunda-feira
E2: =DATA(2025;12;31)-A2 → 256 (dias até o fim do ano)
A coluna D repete a data e usa o formato personalizado dddd, que mostra o dia da semana por extenso. Assim fica fácil ver se o vencimento cai num fim de semana. Formate E2 como Geral ou Número: subtrair duas datas devolve uma quantidade de dias, e o Excel às vezes herda o formato de data e mostra um resultado sem sentido.
| Código | Mostra | Exemplo (22/08/2026) |
|---|---|---|
d / dd |
dia sem / com zero à esquerda | 22 |
ddd / dddd |
dia da semana abreviado / por extenso | sáb / sábado |
m / mm |
mês sem / com zero | 8 / 08 |
mmm / mmmm |
mês abreviado / por extenso | ago / agosto |
aa / aaaa |
ano com 2 / 4 dígitos | 26 / 2026 |
d "de" mmmm "de" aaaa |
texto entre aspas | 22 de agosto de 2026 |
Tabela 1.8. Códigos de formato de data. No Excel em inglês o ano é `yy`/`yyyy`.
=HOJE() (TODAY) e =AGORA() (NOW) se atualizam sempre que a planilha recalcula. Para gravar a data de hoje como valor fixo, use Ctrl+;. Funções que se recalculam a todo momento são chamadas de voláteis, e o Capítulo 3 explica por que convém usá-las com parcimônia.
Na aba F1_Explorar, as datas estão escritas como 2025-04-19, alinhadas à esquerda: são texto, não número. Texto não entra em conta de datas. Teste com =ÉNÚM(B6) (ISNUMBER), que devolve FALSO. Um jeito rápido de converter é =B6+0 (ou Colar Especial › Adicionar com um zero), que devolve o número 45.766, pronto para formatar como data. O ideal, em bases recorrentes, é tratar na origem, com Power Query.
Formatação condicional
A formatação condicional (Página Inicial › Formatação Condicional) pinta células por regra: escalas de cor, barras de dados, ícones ou uma fórmula que destaca exceções. Ela é aprofundada na Sessão 4 do módulo, quando o painel de análise destaca as regiões abaixo da média.
1.5Primeiras fórmulas
Toda fórmula começa com =. A partir daí, você combina valores, endereços, operadores e funções.
| Operador | Significado | Exemplo |
|---|---|---|
+ - * / |
Soma, subtração, multiplicação, divisão | =C6*D6 |
^ |
Potência | =2^10 → 1.024 |
& |
Junta textos | ="Total: "&E12 |
: |
Intervalo | =SOMA(A1:A10) |
= <> > < >= <= |
Comparação (devolvem VERDADEIRO ou FALSO) | =C6>=7 |
Tabela 1.9. Operadores. Em alguns teclados o ^ é tecla "morta": tecle duas vezes ou siga com espaço.
A ordem de cálculo é a da matemática: primeiro parênteses, depois potência, depois multiplicação e divisão, por fim soma e subtração. =8,5/6+4 dá 5,42; =8,5/(6+4) dá 0,85. Na Barra de Fórmulas, cada par de parênteses ganha uma cor, e o Excel destaca o par correspondente quando o cursor passa por ele: é assim que se encontra um parêntese sobrando ou faltando.
Um produto custa R$ 30 (C2) e é vendido por R$ 50 (B2). A margem é (preço − custo) ÷ preço.
=B2-C2/B2 → 49,40 errado: divide 30 por 50 e subtrai de 50
=(B2-C2)/B2 → 40,0% certo: primeiro a diferença, depois a divisão
O Excel não avisa nada no primeiro caso: a fórmula é válida, só responde a outra pergunta. Sempre que houver soma ou subtração antes de uma divisão, coloque os parênteses.
Argumentos e o botão fx
Os itens dentro dos parênteses de uma função são os argumentos. No Excel em português eles são separados por ponto e vírgula; no Excel em inglês, por vírgula. O separador vem da configuração regional do Windows, não do idioma do Excel.
Ao digitar uma função, a dica abaixo da célula mostra os argumentos esperados, com o atual em negrito. Argumentos entre colchetes são opcionais. Para quem está começando, o botão fx (ao lado da Barra de Fórmulas) abre um assistente: explica cada argumento, mostra resultados parciais e até coloca as aspas nos textos.
Referências relativas e absolutas
Uma referência como D6 é relativa: ao copiar a fórmula, ela anda junto. Na prática, o Excel guarda "a célula duas colunas à esquerda, na mesma linha". O cifrão trava a parte que não deve andar. A tecla F4, com o cursor sobre a referência, alterna entre as quatro formas:
| Referência | Ao copiar para baixo | Ao copiar para a direita |
|---|---|---|
D6 |
vira D7 | vira E6 |
$D$6 |
continua D6 | continua D6 |
D$6 |
continua D6 | vira E6 |
$D6 |
vira D7 | continua D6 |
Tabela 1.10. Referências relativas, absolutas e mistas.
A regra prática do professor: se a referência não precisa andar, trave. É o caso de uma nota de corte, de uma taxa ou de um total geral usado como denominador.
Situação: montar uma tabela com o preço de cada item (linhas) para três descontos (colunas), escrevendo uma fórmula só.
A fórmula em C6 precisa ler sempre o preço da coluna B, na linha do item, e sempre o desconto da linha 5, na coluna do desconto:
C6: =$B6*(1-C$5) → copiar para C6:E8
Resultado: Caderno com 5% de desconto, R$ 23,66; Mochila com 15%, R$ 135,92. Se o $ ficasse de fora, a fórmula copiada para D7 viraria =C7*(1-D6) e multiplicaria valores sem sentido.
As funções para começar
| Função (inglês) | O que faz |
|---|---|
SOMA (SUM) |
Soma |
MÉDIA (AVERAGE) |
Média; ignora células vazias e texto |
MÁXIMO / MÍNIMO (MAX / MIN) |
Maior / menor valor |
CONT.NÚM (COUNT) |
Conta células com número |
CONT.VALORES (COUNTA) |
Conta células não vazias (números e textos) |
SE (IF) |
Devolve um valor se o teste é verdadeiro e outro se é falso |
CONT.SES (COUNTIFS) |
Conta células que atendem a um ou mais critérios |
Tabela 1.11. Primeiras funções.
Para calcular soma, média, máximo, mínimo e contagem do mesmo intervalo, escreva =SOMA($C$6:$C$11), trave o intervalo com F4, copie a fórmula para as quatro células de baixo e troque só o nome da função em cada uma. Alt+= monta uma SOMA automática; confira o intervalo sugerido antes de confirmar.
SE: a primeira decisão do modelo
O SE é a primeira função que faz o modelo "decidir": a mesma célula dá respostas diferentes conforme uma condição.
=SE(teste_lógico; valor_se_verdadeiro; valor_se_falso)
=SE(C6>=7; "Aprovado"; "Reprovado")
Textos dentro de uma fórmula vão entre aspas duplas. Sem aspas, o Excel procura uma função ou um nome chamado Aprovado e devolve #NOME?.
Em vez de escrever o 7 e os rótulos dentro da fórmula, coloque-os em células próprias (a nota de corte em G6; "Aprovado" e "Reprovado" em H6 e H7) e aponte para elas com referência absoluta. Para mudar a regra, você altera uma célula, e o modelo inteiro responde. Marque essas células de entrada com uma cor própria, para o usuário saber o que pode ser alterado.
O teste lógico sozinho também é uma fórmula: =C6>=7 devolve VERDADEIRO ou FALSO. Em contas, VERDADEIRO vale 1 e FALSO vale 0. Um SE pode ficar dentro de outro para criar três ou mais resultados.
Regra: nota ≥ 7, Aprovado; nota ≥ 5, Recuperação; abaixo de 5, Reprovado.
=SE(C6>=7; "Aprovado";
SE(C6>=5; "Recuperação"; "Reprovado"))
O Excel testa de fora para dentro e para no primeiro teste verdadeiro. Com as notas da F3_Formulas: Ana (8,5), Carla (7,5), Elisa (9) e Felipe (7) ficam aprovados; Bruno (6) fica de recuperação; Diego (4) é reprovado. A ordem dos testes importa: começando por C6>=5, a Ana cairia em Recuperação. Com mais de duas ou três faixas, SE dentro de SE fica ilegível; o Capítulo 2 apresenta o SES (IFS), que resolve o mesmo problema em sequência.
Por isso =SOMA((D6:D11="Aprovado")*1) conta os aprovados: o *1 (ou -- na frente dos parênteses) transforma os VERDADEIROS em 1. Essa ideia volta com força nas funções de matriz do Capítulo 3.
1.6Uma fórmula, vários resultados: o despejo
O professor apresenta já na primeira aula uma das maiores mudanças do Excel recente. No Microsoft 365, uma fórmula pode devolver um intervalo inteiro, que derrama (spill) pelas células vizinhas. Em vez de escrever =C6*D6 e copiar até a linha 10, você escreve uma vez:
=C6:C10*D6:D10
O resultado ocupa E6:E10. Só E6 contém a fórmula; as outras células mostram a fórmula "fantasma", em cinza, na Barra de Fórmulas. Esse tipo de resultado se chama matriz dinâmica (dynamic array).
O # depois do endereço da célula que contém a fórmula (E6#) refere-se a todo o intervalo despejado, qualquer que seja o tamanho. =SOMA(E6#) soma E6:E10 hoje e soma E6:E12 amanhã, se a base crescer. O # só funciona na célula de origem do despejo: E7# dá erro.
O resultado precisa de espaço livre. Se houver qualquer conteúdo no caminho, a fórmula devolve #DESPEJAR! (#SPILL!) e o Excel desenha um tracejado na área que ela queria ocupar. Limpe o caminho e o resultado aparece.
A vantagem é a manutenção. Numa fórmula copiada célula a célula, inserir uma linha no meio da base exige lembrar de copiar a fórmula de novo; numa fórmula despejada, o intervalo cresce sozinho e tudo o que aponta para E6# acompanha. Em bases grandes, uma fórmula no lugar de 100 mil também deixa o arquivo mais leve.
Matrizes dinâmicas exigem o Excel 365 ou 2021 em diante. Versões antigas e alguns outros aplicativos de planilha mostram o resultado de forma diferente ou dão erro.
O tema volta em profundidade no Capítulo 3, com ÚNICO, FILTRO, CLASSIFICAR e a família EMPILHAR.
1.7Validação de dados: menu suspenso
A validação de dados restringe o que pode ser digitado numa célula. O uso mais comum é o menu suspenso: o usuário escolhe uma opção de uma lista em vez de digitar. Isso evita erros como "Sul", "sul" e "Su" convivendo na mesma base, padroniza a entrada para filtros e somas e é a base de qualquer simulador: a escolha no menu dirige as fórmulas.
- Selecione a célula do menu (C6).
- Dados › Validação de Dados (Alt S V V).
- Guia Configurações: em Permitir, escolha Lista.
- Em Fonte, selecione o intervalo com as opções:
=$H$6:$H$10. - OK. A célula ganha a setinha do menu.
A janela tem três guias:
- Configurações: o tipo de restrição. Além de Lista, há Número inteiro, Decimal, Data, Hora, Comprimento do texto e Personalizado (por fórmula). Exemplo: número inteiro entre 1 e 10.
- Mensagem de entrada: um aviso que aparece quando a célula é selecionada, orientando o preenchimento. Só aparece se tiver corpo de mensagem.
- Alerta de erro: o que acontece quando alguém digita fora da regra.
| Estilo do alerta | Comportamento |
|---|---|
| Parar | Bloqueia o valor inválido |
| Aviso | Pergunta se deseja continuar; o padrão é "Não", então quem tecla Enter sem ler é barrado |
| Informações | Só informa; o valor é aceito |
Tabela 1.12. Estilos do alerta de erro.
- Selecione C6:C11 na F3_Formulas e abra a Validação de Dados.
- Configurações: Permitir Decimal, Dados está entre, Mínimo
0, Máximo10. - Mensagem de entrada: título "Nota", mensagem "Digite uma nota de 0 a 10, com até uma casa decimal".
- Alerta de erro: estilo Parar, mensagem "A nota precisa estar entre 0 e 10".
Resultado: ao clicar numa célula de nota, aparece a orientação; quem digitar 85 em vez de 8,5 é barrado com a mensagem de erro. Para revisar uma base que já existia antes da regra, use Dados › Validação de Dados › Circular Dados Inválidos: o Excel marca com um círculo vermelho os valores fora da regra.
Num formulário de coleta, às vezes vale mais receber um dado fora do padrão e tratá-lo depois do que bloquear o usuário e ficar sem o dado. Escolha o estilo do alerta pensando no uso.
A lista de origem pode estar em outra aba. Uma prática comum é reunir todas as listas numa aba Auxiliar. Também dá para dar um nome ao intervalo da lista (selecione-o, digite LST_Regiao na Caixa de Nome e tecle Enter) e usar =LST_Regiao como fonte da validação. Prefixos como LST_ para listas e tbl_ para Tabelas fazem todos os nomes do mesmo tipo aparecerem juntos quando você começa a digitar.
A lista $H$6:$H$10 é fixa. Se surgir uma região nova na base (Exterior, por exemplo), ela não aparece no menu até alguém editar a validação. O jeito antigo de montar a lista (copiar a coluna, Dados › Remover Duplicatas, classificar de A a Z) tem o mesmo problema: precisa ser refeito a cada atualização. No Capítulo 3, a origem vira dinâmica: =CLASSIFICAR(ÚNICO(tbl_Vendas[Região])) numa célula auxiliar e =$H$6# como fonte da validação. A lista se atualiza sozinha.
Com um filtro aplicado (Dados › Filtro), a SOMA continua somando todas as linhas, inclusive as ocultas pelo filtro. Na aba F1_Explorar, a soma da quantidade é 1.126 com ou sem filtro. =SUBTOTAL(9;E6:E56) (SUBTOTAL; o 9 indica soma) respeita o filtro: com só o Nordeste visível, devolve 394. O curso prefere outros caminhos para somar recortes de uma base, como SOMASES e FILTRO, vistos nos Capítulos 2 e 3, mas é bom reconhecer o SUBTOTAL nas planilhas que você herdar.
1.8Exercícios resolvidos
Os três exercícios da Sessão 1 usam o arquivo EBP_Tools_Fundamentos_2026_Aluno.xlsx. As células amarelas são as que o aluno preenche.
Exercício 1: digitar, formatar e somar (aba F2_Digitar)
Tarefa: completar a tabela de itens, formatar o preço como moeda, calcular o total de cada linha (Qtd × Preço) e o total geral, com o cabeçalho em negrito. Desafio: uma coluna com o percentual de cada item no total.
Caminho clássico. Em E6, =C6*D6; copie para E7:E10 com a alça de preenchimento (ou com Ctrl+C, seleção de E7:E10 e Ctrl+V). Em E12, =SOMA(E6:E10). Formate D6:E12 como moeda com Ctrl+Shift+4. No desafio, =E6/$E$12, com o total geral travado, copiado para baixo e formatado com Ctrl+Shift+5.
Caminho moderno. Uma fórmula só para a coluna inteira:
E6: =C6:C10*D6:D10 → derrama em E6:E10
E12: =SOMA(E6#) → R$ 361,35
F6: =E6#/SOMA(E6#) → derrama em F6:F10
| Item | Qtd | Preço | Total | % do total |
|---|---|---|---|---|
| Caderno | 3 | R$ 24,90 | R$ 74,70 | 20,7% |
| Caneta | 10 | R$ 2,50 | R$ 25,00 | 6,9% |
| Mochila | 1 | R$ 159,90 | R$ 159,90 | 44,3% |
| Estojo | 2 | R$ 34,00 | R$ 68,00 | 18,8% |
| Marcador | 5 | R$ 6,75 | R$ 33,75 | 9,3% |
| Total geral | R$ 361,35 | 100,0% |
Tabela 1.13. Resultado do Exercício 1.
=SOMARPRODUTO(C6:C10;D6:D10) (SUMPRODUCT) multiplica as colunas linha a linha e soma, sem precisar da coluna de totais. =SOMA(C6:C10*D6:D10) faz o mesmo. As três formas dão R$ 361,35. Teste inserindo uma linha nova no meio da tabela (Livro, por exemplo): a versão com # se ajusta sozinha; a versão copiada célula a célula precisa ser estendida.
Exercício 2: estatísticas e SE (aba F3_Formulas)
Tarefa: calcular soma, média, máximo, mínimo e quantidade das notas, e a situação de cada aluno com SE (aprovado com nota ≥ 7). Desafio: contar os aprovados com CONT.SE e calcular o percentual de aprovação.
C14: =SOMA($C$6:$C$11) → 42,0
C15: =MÉDIA($C$6:$C$11) → 7,0
C16: =MÁXIMO($C$6:$C$11) → 9,0
C17: =MÍNIMO($C$6:$C$11) → 4,0
C18: =CONT.NÚM($C$6:$C$11) → 6
D6: =SE(C6:C11>=$G$6;$H$6;$H$7)
A nota de corte (7) e os rótulos ficam fora da fórmula, em G6, H6 e H7, como recomendado na seção 1.5. A fórmula da situação é uma só e derrama pelas seis linhas. O enunciado também aceita a versão simples, =SE(C6>=7;"Aprovado";"Reprovado") em D6, copiada para baixo.
Para o desafio, conte quantos "Aprovado" há no intervalo despejado e divida pelo total de alunos:
C20: =CONT.SES(D6#;"Aprovado") → 4
C21: =CONT.SES(D6#;"Aprovado")/CONT.VALORES(D6#) → 66,7%
O enunciado cita CONT.SE (COUNTIF). O professor prefere usar sempre CONT.SES (COUNTIFS), mesmo com um critério só: a forma no plural aceita quantos critérios forem necessários e evita trocar de função quando a pergunta cresce. O mesmo vale para SOMASES e MÉDIASES, do Capítulo 2.
Com o critério em uma célula, o modelo responde na hora: com nota de corte 8, a aprovação cai para 33,3% (Ana e Elisa); com 4, todos passam.
="% de "&H6&": "&TEXTO(C21;"0,0%") monta o rótulo "% de Aprovado: 66,7%". O & (ou a função CONCAT) junta os pedaços; a função TEXTO formata o número dentro do texto. Se o rótulo em H6 mudar, a frase muda junto.
Exercício 3: menu suspenso (aba F4_Dropdown)
Tarefa: criar um menu suspenso em C6 com as regiões listadas em H6:H10. Desafio: um segundo menu com as categorias Eletrônicos, Casa e Esporte.
O passo a passo é o do Exemplo 1.9: Dados › Validação de Dados › Lista, com a fonte =$H$6:$H$10. Para o desafio, digite as categorias numa coluna livre (ou na aba Auxiliar), crie a validação em outra célula e aponte a fonte para essa nova lista. Para listas curtas e estáveis, a fonte pode ser digitada direto, separada por ponto e vírgula: Eletrônicos;Casa;Esporte.
Assistentes de IA (Claude, ChatGPT, Copilot) são bons para tirar dúvidas pontuais: "qual o atalho para agrupar colunas no Excel em português?" ou "explique os argumentos do SE". Peça sempre a resposta para a sua versão e idioma do Excel e confira na planilha. O módulo final do curso trata de quando usar IA e quando usar fórmula.
- A Caixa de Nome e o F5 levam a qualquer endereço; F5 › Especial seleciona células vazias, constantes ou fórmulas, e Ctrl+Enter preenche toda a seleção.
- Ctrl+setas e Ctrl+Shift+setas navegam e selecionam blocos, mas param no primeiro buraco da base.
- Selecione a linha ou a coluna inteira antes de Ctrl++ / Ctrl+-, para não desalinhar a base.
- Ocultar organiza, não protege. Para mostrar e esconder com frequência, agrupe.
- Formato muda a aparência, não o valor. Datas são números, então dá para somar e subtrair datas.
- Referência relativa anda ao copiar; o
$(tecla F4) trava. Critérios ficam em células, fora da fórmula. - SE decide entre dois resultados; texto vai entre aspas; CONT.SES conta por critério.
- Uma fórmula pode derramar um intervalo inteiro;
E6#refere-se a todo o despejo, e#DESPEJAR!indica caminho ocupado. - Validação de dados em Lista cria menus suspensos que padronizam a entrada e dirigem as fórmulas.
1.9Exercícios propostos
Use a aba F1_Explorar (base de 51 vendas, linhas 6 a 56, colunas B a F).
- Sem usar o mouse, vá até a última venda da base e depois volte para B5. Quais atalhos você usou? Use a Caixa de Nome para ir até H51.
- Calcule a soma da coluna Qtd e o número de vendas da base.
- Aplique um filtro e deixe visível só a região Nordeste. Compare o resultado de
=SOMA(E6:E56)com o de=SUBTOTAL(9;E6:E56). - Calcule o maior preço, o menor preço e o preço médio da base. Que produto tem o maior preço?
- Quantas vendas têm quantidade maior ou igual a 30?
- A coluna Data está como texto. Converta a data da linha 6 em número e formate-a como
dd/mm/aaaa. Que número aparece com o formato Geral? - A fórmula
=$B4*C$2está em D4. Como ela fica ao ser copiada para E5? - Calcule o faturamento total da base (Qtd × Preço, somado) com uma única fórmula.
- Crie um menu suspenso com as regiões da base e, ao lado, use
=CONT.SES(D6:D56;célula_do_menu)para mostrar quantas vendas a região escolhida teve.
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 1 · Tools · Capítulo 2
Tabelas, lógica e busca
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →No Capítulo 1 você conheceu as peças soltas: células, referências, primeiras fórmulas e o despejo. Este capítulo trata de duas tarefas que aparecem em quase toda planilha de negócio: organizar uma base de dados de forma que ela possa crescer sem quebrar nada e cruzar essa base com outras para responder perguntas. Quanto vendeu o Sul em janeiro? Essa região bateu a meta? Qual é a categoria do produto P004? Que comissão cabe a uma receita de R$ 37.500?
As ferramentas são poucas e muito usadas: a Tabela (Ctrl+T) e suas referências estruturadas, a família de condicionais (SE, SES, PARÂMETRO, E, OU, NÃO), as agregações condicionais (SOMASES, CONT.SES, MÉDIASES e SOMARPRODUTO), o tratamento de erros e a busca com PROCX. No fim, a tabela dinâmica, ótima para explorar, e o PROCV, que você vai encontrar em planilhas antigas e precisa saber ler.
- Converter um intervalo em Tabela, dar a ela um nome de negócio e usar referências estruturadas no lugar de endereços.
- Classificar valores por faixas com SES lendo os limites de uma tabela de critérios, e combinar testes com E, OU e NÃO.
- Somar, contar e tirar médias sob várias condições com SOMASES, CONT.SES e MÉDIASES.
- Usar SOMARPRODUTO para somas com pesos e com condições multiplicadas.
- Reconhecer os erros mais comuns do Excel e tratar só o erro esperado com SEERRO.
- Buscar dados com PROCX nos modos exato, aproximado (faixas) e com retorno de várias colunas.
- Montar uma tabela dinâmica e saber quando ela é a ferramenta certa e quando não é.
- Ler um PROCV herdado e reescrevê-lo com PROCX.
Todos os exemplos usam o arquivo EBP_Tools_2026_Aluno.xlsx. As abas Vendas, Produtos, Vendedores e Faixas são as fontes de dados; a base de vendas tem 560 linhas, uma por venda, de janeiro a dezembro de 2025. As abas de exercício deste capítulo são T1_Tabelas, T2_Exercicio e T4_Exercicio.
Os slides chamam as abas de exercício de T2_Tabelas, T3_Agregacao e T4_Busca. No arquivo do aluno elas se chamam T1_Tabelas, T2_Exercicio e T4_Exercicio, respectivamente. O conteúdo é o mesmo; esta apostila usa os nomes do arquivo.
2.1Tabela ou intervalo: por que estruturar
Um intervalo comum, como A1:D500, é uma fotografia dos dados. Uma fórmula como =SOMA(C5:C41) soma exatamente aquelas células. Se entram 20 vendas novas na linha 42 em diante, a soma não as enxerga; as colunas calculadas também não se estendem sozinhas. Alguém precisa lembrar de arrastar fórmulas e corrigir intervalos, e quem lê C5:C41 ainda tem de ir até a base descobrir o que é a coluna C.
A Tabela (guia Inserir › Tabela, ou Ctrl+T) transforma o intervalo num objeto que cresce. O professor resume: no curso, "a Tabela é o nome do jogo". Ela é a base das fórmulas deste capítulo, das tabelas dinâmicas e do Power Query, visto no módulo de Automatização.
| Intervalo (A1:D500) | Tabela (Ctrl+T) |
|---|---|
| Fórmulas não acompanham linhas novas | Linhas coladas logo abaixo entram na Tabela |
| Colunas calculadas precisam ser copiadas | Coluna calculada: a fórmula escrita uma vez vale para todas as linhas |
Referências frágeis: C5:C41 |
Referências estruturadas: tbl_Vendas[Receita] |
| Você arrasta, copia e reconfere | Base para dinâmicas, PROCX e Power Query |
Tabela 2.1. Intervalo × Tabela (slide 14).
- Clique em qualquer célula da base (A4:D22) e tecle Ctrl+T. O Excel detecta o intervalo inteiro.
- Confirme que Minha tabela tem cabeçalhos está marcado e clique em OK. Aparecem as listras e os botões de filtro no cabeçalho.
- Na guia Design da Tabela, campo Nome da Tabela (à esquerda), troque
Tabela1portbl_VendasT1e tecle Enter.
Resultado: a base virou um objeto chamado tbl_VendasT1. Digite =tbl em qualquer célula e todas as Tabelas do arquivo aparecem na lista de sugestões, uma vantagem direta do prefixo.
Sem nome, as fórmulas viram sopa de letrinhas: =SOMA(Tabela6[Qtd]) não diz nada. Dê um nome de negócio, com prefixo: tbl_Vendas, tbl_Produtos, tbl_Faixas. O nome também pode ser trocado em Fórmulas › Gerenciador de Nomes (Ctrl+F3), onde aparecem todas as Tabelas e intervalos nomeados do arquivo.
O arquivo do aluno já traz as bases como Tabelas, com os nomes Vendas, Produtos, Vendedores e Faixas. Para seguir as fórmulas dos slides e desta apostila, renomeie-as com o prefixo: tbl_Vendas, tbl_Produtos, tbl_Vendedores e tbl_Faixas.
Não escreva totais ou subtotais logo abaixo de uma Tabela de dados. Uma linha de total colada embaixo impede a Tabela de crescer (a venda nova precisaria entrar acima dela) e mistura dado com análise. Mantenha a base "limpa", com linhas sempre acrescentadas no fim, e faça os resumos em outra área ou aba. Se quiser um total dentro da própria Tabela, use Design da Tabela › Linha de Totais, que o Excel mantém sempre no fim.
2.2Referências estruturadas e nomes
Com a Tabela criada, as fórmulas passam a falar a língua da base. Ao apontar com o mouse ou com as setas para dentro da Tabela, o Excel escreve sozinho a referência estruturada.
| Referência | O que devolve |
|---|---|
[@Qtd] |
O valor da coluna Qtd na mesma linha (usada dentro da Tabela) |
tbl_VendasT1[Qtd] |
A coluna Qtd inteira, só os dados |
tbl_VendasT1 |
Todos os dados, sem o cabeçalho |
tbl_VendasT1[#Cabeçalhos] |
Só a linha de cabeçalho |
tbl_VendasT1[#Tudo] |
Cabeçalho, dados e totais |
tbl_VendasT1[[#Tudo];[Receita]] |
A coluna Receita com o cabeçalho |
tbl_VendasT1[[PrecoUnit]:[CustoUnit]] |
Bloco de colunas vizinhas |
Tabela 2.2. Sintaxe das referências estruturadas no Excel em português. No Excel em inglês: [#Headers], [#All], [#Data]; o separador dentro dos colchetes duplos é a vírgula.
O @ significa "esta linha". Ele aparece nas fórmulas escritas dentro da Tabela, como as colunas calculadas. Fórmulas de agregação, fora da Tabela, usam a coluna inteira e não têm @.
Pergunta: quantas vendas há na base, qual a receita total e qual a quantidade vendida?
=CONT.VALORES(tbl_Vendas[id_Produto]) → 560
=SOMA(tbl_Vendas[Receita]) → 5.274.448,66
=SOMA(tbl_Vendas[Qtd]) → 7.400
Para escrever, digite =SOMA(tbl_V, tecle Tab para completar o nome, abra o colchete [ e escolha a coluna na lista com Tab. Não é preciso ir até a aba Vendas. Se entrarem vendas novas, as três fórmulas acompanham.
Digite um título na primeira coluna vazia à direita da Tabela (por exemplo, Margem): a Tabela se estende e a coluna passa a fazer parte dela. Em seguida, escreva a fórmula na primeira linha, apontando com as setas: =[@Qtd]*([@PrecoUnit]-[@CustoUnit]). Ao confirmar, o Excel preenche todas as linhas. Em tbl_Vendas, a margem total fica em 1.573.188,66.
Intervalos nomeados
Qualquer intervalo pode ganhar um nome: selecione-o, digite o nome na Caixa de Nome e tecle Enter, ou use o Gerenciador de Nomes. Um nome também pode apontar para um despejo: =Auxiliar!$D$4# cresce e encolhe com a fórmula de origem. O professor usa prefixos por tipo: tbl_ para Tabelas e LST_ para listas de validação. Digitando =LST aparecem todas as listas; digitando =tbl, todas as Tabelas.
Compare a mesma soma escrita de duas formas:
=SOMASES(F1_Explorar!E7:E93; F1_Explorar!D7:D93; C6; F1_Explorar!C7:C93; C7)
=SOMASES(tbl_Vendas[Qtd];
tbl_Vendas[Regiao]; C6;
tbl_Vendas[Produto]; C7)
A segunda diz o que soma, sob quais critérios, e nunca deixa de fora uma venda nova. O Capítulo 3 mostra como gerar a lista de regiões de um menu suspenso a partir da própria Tabela, com ÚNICO e CLASSIFICAR.
A Tabela trabalha linha a linha: a coluna calculada é uma fórmula por linha, replicada pelo Excel. As fórmulas que despejam (Capítulo 1) não funcionam dentro de uma Tabela. A divisão de trabalho que o professor sugere: Tabela para a base de dados, fórmulas de despejo para os resumos e painéis montados fora dela.
2.3A escada da condicional: SE, SES e PARÂMETRO
O SE (IF), visto no Capítulo 1, escolhe entre dois caminhos. Com três ou mais resultados, a solução tradicional é colocar um SE dentro do outro, e a fórmula vai ficando ilegível. O Excel moderno tem duas alternativas:
| Função (inglês) | Use quando | Estrutura |
|---|---|---|
SE (IF) |
Uma decisão, dois resultados | =SE(teste; se_verdadeiro; se_falso) |
SES (IFS) |
Vários testes em cascata, como faixas | =SES(teste1; valor1; teste2; valor2; ...; VERDADEIRO; padrão) |
PARÂMETRO (SWITCH) |
Comparar um valor com uma lista de opções exatas | =PARÂMETRO(expressão; valor1; resultado1; ...; [padrão]) |
Tabela 2.3. A escada da condicional (slide 17).
SES: classificação por faixas
O SES testa de cima para baixo e para no primeiro teste verdadeiro. A ordem importa: em faixas, comece pela ponta mais alta (ou pela mais baixa) e siga em sequência. Quem chega ao segundo teste já falhou no primeiro; por isso não é preciso escrever "maior que 40.000 e menor que 80.000".
O SES só lida com testes verdadeiros. Se nenhum teste passar, ele devolve #N/D. Feche a lista com o par VERDADEIRO; "padrão": um teste que sempre passa e acolhe tudo o que sobrou. No exemplo das notas, uma nota negativa ou um texto cairiam no padrão em vez de virar erro.
Regra: receita a partir de R$ 20.000, "Grande"; a partir de R$ 5.000, "Média"; abaixo disso, "Pequena". Os limites ficam em células (H2 e H3 de uma aba auxiliar, por exemplo), nunca dentro da fórmula.
Coluna calculada Porte em tbl_Vendas:
=SES([@Receita]>=Auxiliar!$H$2; "Grande";
[@Receita]>=Auxiliar!$H$3; "Média";
VERDADEIRO; "Pequena")
Para contar cada porte: =CONT.SES(tbl_Vendas[Porte];"Grande").
Resultado: 93 vendas grandes (R$ 3.215.575,12), 133 médias (R$ 1.380.453,67) e 334 pequenas (R$ 678.419,87). As 93 vendas grandes, 17% das linhas, respondem por 61% da receita. Mude o limite de H2 para 30.000 e toda a coluna se reclassifica.
Cada faixa nova é mais um par no SES. Com dez faixas, a fórmula tem dez pares, e mudar a régua exige editar a fórmula. Quando as faixas são muitas ou mudam com frequência, monte uma tabela de faixas e use PROCX no modo aproximado (seção 2.8): a fórmula não muda, só a tabela cresce. Os dois caminhos dão o mesmo resultado; o professor considera o PROCX mais fácil de manter.
PARÂMETRO: um valor, várias opções
O PARÂMETRO (SWITCH) compara uma única expressão com uma lista de valores exatos. Serve para "traduções" curtas, em que não há faixa, só correspondência.
Regra (hipotética): Eletrônicos pertence à unidade Tecnologia; Escritório, à unidade Corporativo; todas as outras categorias, ao Varejo.
=PARÂMETRO([@Categoria];
"Eletrônicos"; "Tecnologia";
"Escritório"; "Corporativo";
"Varejo")
O último argumento, sem par, é o padrão. Somando a receita por unidade com SOMASES: Tecnologia R$ 3.113.638,90; Corporativo R$ 1.888.839,73; Varejo R$ 271.970,03 (Casa e Esporte).
O PARÂMETRO não aceita comparações como >=, só igualdade. Para faixas, SES ou PROCX aproximado. Para listas longas de correspondências, uma tabela de-para com PROCX (seção 2.8) é mais fácil de manter do que um PARÂMETRO gigante.
2.4E, OU, NÃO: combinar condições
| Função (inglês) | Devolve VERDADEIRO quando |
|---|---|
E (AND) |
todas as condições são verdadeiras |
OU (OR) |
pelo menos uma condição é verdadeira |
NÃO (NOT) |
a condição é falsa (inverte VERDADEIRO e FALSO) |
Tabela 2.4. Operadores lógicos. E só dá FALSO se algum teste falhar; OU só dá FALSO se todos falharem.
Essas funções devolvem VERDADEIRO ou FALSO, não um texto. Para mostrar "Bônus" ou "-", embrulhe-as num SE. Elas aparecem dentro de SE e SES, em formatação condicional e em validação de dados.
Regra: recebe bônus a venda com receita a partir de R$ 20.000 e feita na região Sul.
=SE(E([@Receita]>=20000; [@Regiao]="Sul"); "Bônus"; "-")
Resultado: 25 vendas recebem "Bônus", somando R$ 825.238,00. Trocando E por OU, a regra viraria "receita alta ou Sul", e 211 vendas teriam bônus: 93 grandes mais as 143 do Sul, menos as 25 que estão nos dois grupos.
O NÃO é útil para validar entradas. No exemplo das notas trabalhado em aula, um texto digitado no lugar da nota passava no teste >=7, porque o Excel considera texto maior que qualquer número. A saída é testar antes se o valor é número:
=SES(NÃO(ÉNÚM(C6)); "Nota fora do formato";
C6>=7; "Aprovado";
C6>=5; "Recuperação";
VERDADEIRO; "Reprovado")
E(tbl_Vendas[Regiao]="Sul"; tbl_Vendas[Mes]="Jan") não testa linha a linha: devolve um único VERDADEIRO ou FALSO para a coluna inteira. Por isso, numa fórmula que despeja, o E dá resultado errado sem avisar. Para somar ou contar sob várias condições, use SOMASES, CONT.SES ou SOMARPRODUTO, que são o assunto das próximas seções.
2.5SOMASES e a família condicional
Somar, contar ou tirar a média de uma parte da base é a pergunta mais comum de qualquer análise. A família de funções no plural resolve todas com o mesmo padrão:
=SOMASES(intervalo_soma; intervalo_critério1; critério1; [intervalo_critério2; critério2]; ...)
=CONT.SES(intervalo_critério1; critério1; ...)
=MÉDIASES(intervalo_média; intervalo_critério1; critério1; ...)
- SOMASES (SUMIFS) soma; CONT.SES (COUNTIFS) conta linhas; MÉDIASES (AVERAGEIFS) tira a média. O CONT.SES não tem intervalo de soma: começa direto pelos critérios.
- Cada critério vem em par: onde testar e o quê testar. Todos precisam ser atendidos ao mesmo tempo (é um E).
- Critério de igualdade dispensa o
=: basta a célula ou o texto entre aspas.
As versões no singular (SOMASE, CONT.SE, MÉDIASE) aceitam um critério só e têm a ordem dos argumentos diferente. O professor usa sempre o plural, mesmo com um critério: quando a pergunta ganha uma condição, basta acrescentar um par.
=SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; "Sul"; tbl_Vendas[Mes]; "Jan") → 50.450,67
=CONT.SES(tbl_Vendas[Regiao]; "Sul"; tbl_Vendas[Mes]; "Jan") → 9
=MÉDIASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; "Sul"; tbl_Vendas[Mes]; "Jan") → 5.605,63
O ticket médio é a receita dividida pelo número de vendas: 50.450,67 ÷ 9 = 5.605,63. Num modelo, "Sul" e "Jan" ficam em células com menu suspenso, e as fórmulas apontam para elas com referência absoluta.
Critérios com operadores
O critério pode ser um número, um texto ou uma comparação. A comparação vai entre aspas; para usar o valor de uma célula, junte o operador com &.
| Critério | Significa | Receita somada na base |
|---|---|---|
"Sul" ou C6 |
igual a Sul | 1.352.995,85 |
"<>Sul" |
diferente de Sul | 3.921.452,81 |
">=20000" |
maior ou igual a 20.000 | 3.215.575,12 |
">="&H2 |
maior ou igual ao valor de H2 | depende de H2 |
"*Pro" |
texto terminado em "Pro" (curinga) | 1.636.792,37 (Notebook Pro) |
Tabela 2.5. Tipos de critério, aplicados a SOMASES(tbl_Vendas[Receita]; coluna; critério). Nos três primeiros a coluna testada é Regiao ou Receita; no último, Produto.
Todos os intervalos de um SOMASES precisam ter o mesmo número de linhas e começar na mesma linha. E7:E93 com D7:D92 devolve #VALOR!. Com colunas da mesma Tabela, isso nunca acontece: é mais um motivo para usar referências estruturadas.
Como os critérios do SOMASES valem juntos, "Sul ou Sudeste" não cabe em dois pares. Duas saídas: somar dois SOMASES, ou passar as opções numa matriz e envolver tudo numa SOMA:
=SOMA(SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; {"Sul";"Sudeste"})) → 2.339.844,97 (274 vendas).
Filtrar por período, com critérios como ">="&DATA(2025;1;1) e "<="&FIMMÊS(...) (o "sanduíche de datas"), exige que a coluna de datas seja numérica. Na aba Vendas, a coluna Data está como texto; o Capítulo 3 trata da conversão e das funções de data.
2.6SOMARPRODUTO: pesos e condições multiplicadas
O SOMARPRODUTO (SUMPRODUCT) multiplica matrizes elemento a elemento e soma tudo. O uso clássico é o de pesos: quantidade × preço, linha a linha, somado no fim, sem precisar de coluna auxiliar.
=SOMARPRODUTO(tbl_Vendas[Qtd]; tbl_Vendas[PrecoUnit]-tbl_Vendas[CustoUnit]) → 1.573.188,66
Dá o mesmo valor da coluna calculada Margem, sem criar a coluna.
Preço médio do Notebook Pro. Cada venda tem um preço unitário diferente. A média simples dos preços é 3.410,14, mas ela trata igualmente uma venda de 1 unidade e outra de 25. O preço médio ponderado pela quantidade é:
=SOMARPRODUTO(tbl_Vendas[Qtd]*tbl_Vendas[PrecoUnit]*(tbl_Vendas[Produto]="Notebook Pro"))
/ SOMASES(tbl_Vendas[Qtd]; tbl_Vendas[Produto]; "Notebook Pro")
→ 1.636.792,37 / 483 = 3.388,80
O ponderado é o preço que, multiplicado pelas 483 unidades, reproduz a receita do produto.
Condições que viram 1 e 0
O segundo uso é a soma condicional. Uma comparação entre parênteses, como (tbl_Vendas[Regiao]="Sul"), devolve uma coluna de VERDADEIRO e FALSO. Numa multiplicação, VERDADEIRO vale 1 e FALSO vale 0. Multiplicando a receita por várias condições, só sobra a receita das linhas que passam em todas.
=SOMARPRODUTO(tbl_Vendas[Receita]*(tbl_Vendas[Regiao]="Sul")*(tbl_Vendas[Mes]="Jan")) → 50.450,67
É o mesmo número do SOMASES do Exemplo 2.6. A multiplicação faz o papel do E. Para um OU, some as condições: ((tbl_Vendas[Regiao]="Sul")+(tbl_Vendas[Regiao]="Sudeste")) vale 1 nas linhas de uma das duas regiões.
| Quando usar | SOMASES | SOMARPRODUTO |
|---|---|---|
| Critérios diretos de igualdade ou comparação | Mais simples e mais rápido | Funciona |
| Multiplicar colunas antes de somar (Qtd × Preço) | Não aceita | Aceita |
| Condição calculada sobre a coluna (ano de uma data, texto tratado) | Não aceita | Aceita |
| OU entre condições | Duas fórmulas ou matriz de critérios | Soma das condições |
Tabela 2.6. SOMASES ou SOMARPRODUTO. Em aula, a tentativa de passar `tbl_Vendas[Qtd]*tbl_Vendas[PrecoUnit]` como intervalo de soma do SOMASES deu erro: o SOMASES só aceita intervalos, não contas.
Em versões antigas do Excel, fórmulas que operavam sobre matrizes exigiam Ctrl+Shift+Enter. O SOMARPRODUTO sempre dispensou isso, e no Excel 365 uma simples =SOMA(tbl_Vendas[Receita]*(tbl_Vendas[Regiao]="Sul")) também funciona. Sem a SOMA em volta, a multiplicação despeja uma coluna com a receita ou zero em cada linha: é a mesma lógica das matrizes dinâmicas do Capítulo 3.
Todas as matrizes multiplicadas precisam ter o mesmo número de linhas; caso contrário, o resultado é #VALOR!. E não misture os dois estilos: com condições, coloque tudo dentro do primeiro argumento, multiplicando. Separar com ; uma condição de VERDADEIRO/FALSO faz o SOMARPRODUTO tratá-la como zero.
2.7Tratamento de erros
Cada erro do Excel diz o que deu errado. Antes de tratar, entenda a causa.
| Erro | Inglês | Causa típica |
|---|---|---|
#N/D |
#N/A | Valor não encontrado numa busca; SES sem caso padrão |
#DIV/0! |
#DIV/0! | Divisão por zero, como a média de um grupo sem linhas |
#VALOR! |
#VALUE! | Tipo errado: conta com texto, intervalos de tamanhos diferentes |
#REF! |
#REF! | A fórmula apontava para uma célula, linha ou aba que foi excluída |
#NOME? |
#NAME? | Função não reconhecida: erro de digitação ou nome no idioma errado (SOMA no Excel em inglês) |
#DESPEJAR! |
#SPILL! | O despejo encontrou o caminho ocupado (Capítulo 1) |
Tabela 2.7. Os erros mais comuns.
Um erro se propaga: qualquer conta que usa uma célula com erro também dá erro. Uma planilha cheia de #REF! passa a impressão de modelo quebrado, e quem a recebe deixa de confiar nos números.
A função SEERRO (IFERROR) devolve o resultado da fórmula ou, se ela der erro, um valor alternativo:
=SEERRO(fórmula; valor_se_erro)
Na lista de regiões do resumo de janeiro, alguém acrescentou "Exterior", que não tem vendas. O MÉDIASES soma zero e divide por zero linhas: #DIV/0!.
=SEERRO(MÉDIASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; A12; tbl_Vendas[Mes]; $B$4); 0)
O valor escolhido muda as contas seguintes. A média dos tickets das cinco regiões reais é 9.865,59. Com Exterior tratado como 0, a média das seis linhas cai para 8.221,33. Com "" (texto vazio), a MÉDIA ignora a célula e volta a 9.865,59. Escolha o valor de substituição pensando em quem vai usar o número depois.
SEERRO por reflexo, em toda fórmula, esconde problemas de verdade: um #REF! de uma referência apagada ou um #VALOR! de dado mal formatado viram zero e passam despercebidos. Use SEERRO onde o erro é previsível e tem significado (uma busca que pode não achar, uma divisão que pode ser por zero) e deixe os outros aparecerem. Nas buscas, prefira o argumento se_não_encontrada do PROCX, que trata só o "não encontrado".
Outras funções do mesmo grupo: SENÃODISP (IFNA) trata apenas o #N/D; ÉERROS (ISERROR) devolve VERDADEIRO para qualquer erro, útil como teste lógico dentro de um SE. Cuidado com a parecida ÉERRO (ISERR), que não considera o #N/D como erro.
2.8Busca: do PROCV ao PROCX
Buscar é levar uma informação de uma tabela para outra. A base de vendas tem o código do vendedor, mas não o gerente; a lista do exercício tem o código do produto, mas não o nome. O que liga as duas tabelas é a chave.
O valor que identifica cada registro e conecta duas tabelas: código do produto, código do vendedor, CPF. Uma boa chave é única na tabela onde se busca e escrita exatamente igual nos dois lados. Nome de pessoa ou de cidade é chave ruim, porque se repete (homônimos) e aparece com grafias diferentes.
Por mais de uma década, a função de busca foi o PROCV (VLOOKUP). Desde 2019 o Excel tem o PROCX (XLOOKUP), que resolve as limitações do PROCV. O curso constrói tudo com PROCX; o PROCV aparece na seção 2.10, para leitura.
=PROCX(valor_procurado; matriz_procurada; matriz_retorno; [se_não_encontrada]; [modo_correspondência]; [modo_pesquisa])
| Argumento | Para que serve |
|---|---|
valor_procurado |
A chave: o que procurar |
matriz_procurada |
A coluna onde procurar |
matriz_retorno |
A coluna (ou colunas) a devolver, em qualquer posição |
[se_não_encontrada] |
O que mostrar se não achar, no lugar de #N/D |
[modo_correspondência] |
0 exato (padrão); -1 exato ou próximo menor; 1 exato ou próximo maior; 2 curinga |
[modo_pesquisa] |
1 do primeiro ao último (padrão); -1 do último ao primeiro; 2 e -2 busca binária em lista ordenada |
Tabela 2.8. Os argumentos do PROCX. Os três últimos são opcionais.
Gerente do vendedor V03:
=PROCX("V03"; tbl_Vendedores[id_Vendedor]; tbl_Vendedores[Gerente]; "não achou") → Rita Alves
=PROCX("V09"; tbl_Vendedores[id_Vendedor]; tbl_Vendedores[Gerente]; "não achou") → não achou
Código de uma vendedora a partir do nome. A coluna de retorno pode estar à esquerda da coluna de busca, algo que o PROCV não faz:
=PROCX("Elisa Cruz"; tbl_Vendedores[Vendedor]; tbl_Vendedores[id_Vendedor]) → V05
Dentro de tbl_Vendas, a coluna calculada =PROCX([@id_Vendedor]; tbl_Vendedores[id_Vendedor]; tbl_Vendedores[Gerente]; "-") traz o gerente de cada uma das 560 vendas.
É a mudança mais importante em relação ao PROCV, cujo padrão é a correspondência aproximada. No PROCX, se você não disser nada, ele procura o valor exato; o aproximado precisa ser pedido no 5º argumento.
Para trazer o nome do produto P004, você pode procurar em tbl_Vendas (o nome aparece em 43 linhas) ou em tbl_Produtos (12 linhas, uma por produto). Busque no cadastro: a chave é única, a busca é mais leve e o resultado não depende de existir venda daquele produto.
Busca aproximada: faixas
Comissões, alíquotas de imposto e ratings costumam vir em faixas. Na aba Faixas, cada linha traz o piso da faixa e a comissão correspondente: de 0 a 19.999,99, 2%; de 20.000 a 49.999,99, 3%; de 50.000 a 99.999,99, 4,5%; a partir de 100.000, 6%. O modo -1 faz o PROCX achar a faixa, não o valor exato.
=PROCX(37500; tbl_Faixas[Min]; tbl_Faixas[Comissao]; ; -1) → 3,0%
=PROCX(100000; tbl_Faixas[Min]; tbl_Faixas[Comissao]; ; -1) → 6,0% (achou o valor exato)
=PROCX(19999,99; tbl_Faixas[Min]; tbl_Faixas[Comissao]; ; -1) → 2,0%
O 4º argumento ficou vazio (dois ; seguidos). Com os pisos na tabela, o modo certo é o -1. O modo 1 (próximo maior) serviria se a tabela listasse o teto de cada faixa. Na dúvida, teste com um valor de cada faixa e confira de olho.
Última venda da Cadeira Ergo. O PROCV sempre devolve a primeira ocorrência. O 6º argumento do PROCX permite procurar de baixo para cima:
=PROCX("Cadeira Ergo"; tbl_Vendas[Produto]; tbl_Vendas[Receita]; ; 0; -1) → 2.029,34
A busca normal (modo 1) devolve 9.659,79, a venda da linha 6; a de baixo para cima devolve a da linha 543, a última da Tabela. "Última" aqui é a posição na base, não a data mais recente: a aba Vendas não está em ordem cronológica.
A classificação Alta/Média/Baixa do Exercício 2 também sai com =PROCX(B7; limites; faixas; ; -1), desde que a tabela de critérios esteja em ordem crescente de limite (Baixa 0, Média 40.000, Alta 80.000). O resultado é idêntico ao do SES. A vantagem: para criar uma faixa nova, você acrescenta uma linha na tabela, e a fórmula continua a mesma.
Retorno de várias colunas
A matriz de retorno pode ter mais de uma coluna. Nesse caso, o PROCX devolve a linha encontrada inteira e despeja o resultado nas células à direita:
=PROCX("P004"; tbl_Produtos[id_Produto]; tbl_Produtos[[Produto]:[CustoUnit]]) → Cadeira Ergo | Escritório | 700
O intervalo [[Produto]:[CustoUnit]] pega as colunas vizinhas de Produto até CustoUnit. Para devolver colunas que não são vizinhas, ou em outra ordem, será preciso juntar pedaços com EMPILHARH, assunto do Capítulo 3.
O valor procurado também pode ser um intervalo. =PROCX(A5:A12; tbl_Produtos[id_Produto]; tbl_Produtos[Produto]) procura os oito códigos de uma vez e despeja os oito nomes. Se a lista de códigos for ela própria um despejo (em A5), use A5# e a busca acompanha o tamanho da lista. Só não combine as duas coisas: lista de valores e várias colunas de retorno na mesma fórmula. Para vários campos, escreva uma fórmula por linha ou um PROCX por coluna.
2.9Tabela dinâmica: usos e limites
A tabela dinâmica (pivot table) resume uma base arrastando campos, sem escrever fórmula. É a forma mais rápida de explorar dados desconhecidos.
- Clique dentro de tbl_Vendas e vá em Inserir › Tabela Dinâmica. Confirme a origem (tbl_Vendas) e escolha Nova Planilha.
- No painel Campos da Tabela Dinâmica, arraste Regiao para Linhas e Receita para Valores. O Excel cria "Soma de Receita".
- Arraste Mes para Filtros e escolha Jan no filtro que aparece acima da tabela.
- Arraste Receita de novo para Valores. No novo campo, abra Configurações do Campo de Valor › Mostrar Valores Como › % do Total Geral e renomeie-o para "% da Receita".
Resultado: Sudeste lidera com R$ 141.698,53 (37,6% de janeiro), seguido de Nordeste (87.460,09; 23,2%), Norte (55.501,53; 14,7%), Sul (50.450,67; 13,4%) e Centro-Oeste (41.675,93; 11,1%). Total: R$ 376.786,75, exatamente os números do SOMASES do Exercício 2.
O que mais ela faz com poucos cliques:
- Mudar a operação: em Configurações do Campo de Valor, troque Soma por Contagem, Média, Máximo...
- Hierarquias: Regiao e, abaixo dela, Vendedor nas Linhas. A ordem dos campos na área define a hierarquia.
- Agrupar datas: com uma coluna de datas numérica nas Linhas ou Colunas, clique com o botão direito › Agrupar e escolha Meses, Trimestres e Anos. (A coluna Data da aba Vendas está como texto; converta-a antes somando zero, como no Capítulo 1.)
- Segmentação de Dados (slicer): Analisar da Tabela Dinâmica › Inserir Segmentação de Dados cria botões de filtro clicáveis. Em Conexões de Relatório, a mesma segmentação filtra várias dinâmicas ao mesmo tempo, a base de um painel simples.
- Gráfico Dinâmico e Campo Calculado (por exemplo, Qtd × PrecoUnit quando a base não tem Receita).
Clique com o botão direito na dinâmica › Opções da Tabela Dinâmica e desmarque Ajustar automaticamente a largura das colunas ao atualizar: assim a dinâmica não desmancha a largura das colunas da aba a cada atualização. Dê um nome à dinâmica (por exemplo, pvt_Vendas) em Analisar da Tabela Dinâmica › Nome. E deixe desligada a opção de gerar INFODADOSTABELADINÂMICA (GETPIVOTDATA) ao clicar numa célula da dinâmica, como recomendado no Capítulo 1.
Onde ela limita
A tabela dinâmica não lê a base a cada mudança. Ela guarda uma cópia dos dados (o cache) no momento em que é criada ou atualizada e trabalha sobre essa cópia.
| Quando é ótima | Onde ela limita |
|---|---|
| Explorar uma base rápido, arrastando campos | Precisa de Atualizar quando a base muda |
| Somar, contar e tirar média por categoria em segundos | Não entra dentro de outra fórmula |
| Agrupar datas e mostrar % do total | Layout rígido; difícil de auditar célula a célula |
| Análise pontual (ad hoc) | Relatório recorrente e vivo pede fórmulas: SOMASES, PROCX, AGRUPARPOR |
Tabela 2.9. Usos e limites da tabela dinâmica (slide 27).
Por outro lado, por trabalhar sobre uma cópia, a dinâmica pode resumir uma base que nem está no arquivo, carregada pelo Power Query, o que deixa o arquivo bem mais leve. O módulo de Automatização volta a esse ponto. A função AGRUPARPOR (GROUPBY), que monta um resumo como o da dinâmica com uma fórmula viva, é assunto do Capítulo 4.
2.10PROCV: saber ler o legado
Você vai herdar planilhas cheias de PROCV. Saiba ler, mas construa com PROCX.
=PROCV(valor_procurado; matriz_tabela; núm_índice_coluna; [procurar_intervalo])
=PROCV($B2; Base!$A:$D; 3; FALSO)
Leitura: "procure o valor de B2 na primeira coluna de Base!A:D e devolva a 3ª coluna dessa matriz, com correspondência exata (FALSO)". O PROCV percorre a primeira coluna de cima para baixo e para na primeira ocorrência.
| Limitação do PROCV | Como o PROCX resolve |
|---|---|
| Índice fixo (3) quebra ao inserir ou excluir coluna | A coluna de retorno é um intervalo próprio |
| Só busca da esquerda para a direita: a chave tem de ser a 1ª coluna | Retorno em qualquer posição |
| Padrão aproximado: sem o FALSO, devolve um valor "parecido" sem avisar | Exato por padrão |
| Devolve só a primeira ocorrência | Modo de pesquisa -1 pega a última |
| Sem tratamento de "não encontrado" (exige SEERRO em volta) | se_não_encontrada embutido |
Tabela 2.10. Por que o PROCV ficou para leitura (slides 24 e 28).
=PROCV(B2; Base!A:D; 3), sem o quarto argumento, usa correspondência aproximada. Com a base fora de ordem, ele devolve a informação de outra linha, sem erro. Ao auditar uma planilha herdada, a primeira coisa a conferir num PROCV é se ele termina com FALSO (ou 0).
O PROCV tem um irmão, o PROCH (HLOOKUP), que faz a mesma busca numa base deitada: procura na primeira linha e devolve a linha de número informado. É raro em bases bem montadas, que têm um registro por linha.
Situação: uma planilha de vendas digitada à mão tem o mesmo produto escrito de vários jeitos: "NB Pro", "Notebook Pró", "Note Pro". Para somar por produto, todos precisam virar "Notebook Pro". A solução é uma tabela de-para com duas colunas, Digitado e Padronizado, convertida em Tabela (tbl_DePara).
Como a planilha herdada faz (com a tabela de-para em H:I):
=PROCV(B2; $H$2:$I$20; 2; FALSO)
Como reescrever com PROCX:
=PROCX(B2; tbl_DePara[Digitado]; tbl_DePara[Padronizado]; B2)
O 4º argumento devolve o próprio texto original quando ele não está na tabela: grafias que já estão certas passam direto, e as novas aparecem para alguém incluir na de-para. Cuidado: o PROCX não diferencia maiúsculas de minúsculas, mas diferencia um espaço sobrando ("Notebook Pro " com espaço no fim). Limpar esses detalhes com ARRUMAR e PRI.MAIÚSCULA é assunto do Capítulo 3; para bases recorrentes, o lugar certo é o Power Query.
Você pode encontrar =PROCV(B2; Base!A:D; {2;3}; FALSO) ou {2\3}, dependendo da configuração. As chaves criam uma matriz de índices, e o PROCV devolve as colunas 2 e 3 de uma vez, despejando o resultado. Funciona, mas continua com índices fixos.
2.11Exercícios resolvidos
Os três exercícios usam o arquivo EBP_Tools_2026_Aluno.xlsx. As células amarelas são as que o aluno preenche. Antes de começar, renomeie as Tabelas de dados para tbl_Vendas, tbl_Produtos, tbl_Vendedores e tbl_Faixas (seção 2.1).
Exercício 1: da base crua à Tabela viva (aba T1_Tabelas)
Tarefa: converter o intervalo A4:D22 em Tabela, nomeá-la e criar a coluna Margem = Qtd × (PrecoUnit − CustoUnit). Depois, acrescentar linhas e ver a Tabela absorvê-las. O enunciado da aba sugere o nome VendasT1; com o prefixo recomendado pelo professor, fica tbl_VendasT1.
- Clique em A5, tecle Ctrl+T e confirme o intervalo com cabeçalhos.
- Em Design da Tabela › Nome da Tabela, digite
tbl_VendasT1. - Em E5, digite
=e use as setas para apontar Qtd, PrecoUnit e CustoUnit da mesma linha. A fórmula fica com@e preenche as 18 linhas.
- Fora da Tabela, deixando uma linha em branco, calcule os totais com referências estruturadas:
B24: =SOMA(tbl_VendasT1[Qtd]) → 217
B25: =SOMA(tbl_VendasT1[Margem]) → 53.971,98
- Teste o crescimento: copie a linha 22 e cole-a na linha 23, logo abaixo da Tabela. A Tabela se estende, a margem da linha nova aparece sozinha e os totais vão para 230 e 59.064,73. Desfaça com Ctrl+Z antes de seguir; se a linha de totais estivesse colada na Tabela, ela teria bloqueado o crescimento.
Selecione E5:E22: a barra de status mostra Soma 53.971,98, o mesmo valor de B25. As margens vão de 61,65 (Organizador, linha 6) a 9.303,04 (Cadeira Ergo, linha 17).
Exercício 2: agregação condicional (aba T2_Exercicio)
Tarefa: para o mês escolhido em B4 (Jan), calcular por região a receita total (SOMASES) e o número de vendas (CONT.SES), e classificar o desempenho com SES lendo os limites de uma tabela de critérios: Alta a partir de R$ 80.000, Média a partir de R$ 40.000, Baixa abaixo disso. Depois, trocar um limite e ver a classificação mudar. Desafio: ticket médio por região com MÉDIASES e destaque, com formatação condicional, das regiões abaixo da média geral.
Passo 1: tabela de critérios. A aba não traz os limites; monte-os ao lado do resumo, em F6:G9 (Faixa e Limite mínimo), com os limites em amarelo, por serem entradas. Valores usados em aula: Alta 80.000, Média 40.000, Baixa 0.
Passo 2: receita e número de vendas. Em B7 e C7, com a região travada na coluna e o mês travado por inteiro, e depois copiadas até a linha 11:
B7: =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; $A7; tbl_Vendas[Mes]; $B$4)
C7: =CONT.SES(tbl_Vendas[Regiao]; $A7; tbl_Vendas[Mes]; $B$4)
Um SOMASES só com o critério do mês, sem a região, deve dar a soma de B7:B11: 376.786,75, com 38 vendas. Se não bater, alguma região da lista está escrita diferente da base ou falta alguma região.
Passo 3: classificação. Em D7, copiada para baixo:
D7: =SES(B7>=$G$7; $F$7;
B7>=$G$8; $F$8;
VERDADEIRO; $F$9)
| Região | Receita | Nº vendas | Classificação | Ticket médio |
|---|---|---|---|---|
| Sul | 50.450,67 | 9 | Média | 5.605,63 |
| Sudeste | 141.698,53 | 11 | Alta | 12.881,68 |
| Nordeste | 87.460,09 | 6 | Alta | 14.576,68 |
| Norte | 55.501,53 | 7 | Média | 7.928,79 |
| Centro-Oeste | 41.675,93 | 5 | Média | 8.335,19 |
| Total / média geral | 376.786,75 | 38 | 9.915,44 |
Tabela 2.11. Resultado do Exercício 2 para janeiro.
Passo 4: troque um limite. Com o limite de Alta em 90.000 (G7), o Nordeste (87.460,09) cai para Média; só o Sudeste continua Alta. Com o limite de Média em 50.000 (G8), o Centro-Oeste (41.675,93) vira Baixa. Nenhuma fórmula foi editada.
Em aula, o professor acrescentou vendas de teste à base para mostrar a Tabela crescendo. Por isso, alguns valores mostrados na tela (Sudeste em janeiro, por exemplo) diferem dos desta apostila, calculados sobre a base original de 560 vendas.
Desafio: ticket médio e destaque. Em E7, copiada para baixo, e a média geral em E13:
E7: =MÉDIASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; $A7; tbl_Vendas[Mes]; $B$4)
E13: =MÉDIASES(tbl_Vendas[Receita]; tbl_Vendas[Mes]; $B$4) → 9.915,44
A média geral é a média das 38 vendas de janeiro (376.786,75 ÷ 38), não a média dos cinco tickets (9.865,59): regiões com mais vendas pesam mais.
Para o destaque, selecione E7:E11 e use Página Inicial › Formatação Condicional › Regras de Realce das Células › É Menor do que, com a referência =$E$13 e preenchimento vermelho claro. Duplique a regra em Gerenciar Regras para "É Maior do que", em verde. Para pintar a linha inteira (A:E), use Nova Regra › Usar uma fórmula com =$E7<$E$13 aplicada a $A$7:$E$11: a coluna E travada, a linha livre.
Com um menu suspenso em B4 (Validação de Dados › Lista, com os meses), o resumo inteiro responde à escolha. A lista dos meses pode ser digitada ou gerada a partir da base; como os meses estão como texto ("Jan", "Fev"...), uma lista gerada por fórmula sai em ordem alfabética, não cronológica. O Capítulo 3 mostra como resolver isso com datas de verdade.
Exercício 3: busca e cruzamento (aba T4_Exercicio)
Tarefa: completar a lista de produtos com nome e categoria (PROCX), a comissão pela faixa da receita (PROCX aproximado) e, embaixo, a receita de um produto num mês (busca 2D). Tratar os não encontrados com se_não_encontrada. Desafio: um único PROCX que devolva várias colunas.
Nome e categoria. A chave é o id_Produto, e a busca é feita no cadastro, tbl_Produtos. Uma fórmula em C5 resolve as oito linhas:
C5: =PROCX(A5:A12; tbl_Produtos[id_Produto]; tbl_Produtos[Produto]; "não achou")
D5: =PROCX(A5:A12; tbl_Produtos[id_Produto]; tbl_Produtos[Categoria]; "não achou")
Desafio: várias colunas de uma vez. Com a matriz de retorno [[Produto]:[Categoria]], o PROCX devolve as duas colunas. Como a busca de uma lista inteira com várias colunas de retorno não funciona, a fórmula vai em C5 com uma chave só ($A5) e é copiada até C12; cada uma despeja em duas células. O slide propõe incluir também o custo, com tbl_Produtos[[Produto]:[CustoUnit]]; aqui isso invadiria a coluna E, reservada à comissão, então faça essa versão numa área livre à direita.
Comissão. A receita de cada linha está em B; os pisos das faixas, em tbl_Faixas[Min]. O modo -1 pega o maior piso que não passa da receita:
E5: =PROCX(B5:B12; tbl_Faixas[Min]; tbl_Faixas[Comissao]; ; -1)
| id | Receita | Produto | Categoria | Comissão | Comissão em R$ |
|---|---|---|---|---|---|
| P001 | 44.269,27 | Notebook Pro | Eletrônicos | 3,0% | 1.328,08 |
| P004 | 24.895,11 | Cadeira Ergo | Escritório | 3,0% | 746,85 |
| P007 | 80.904,66 | Fone BT | Eletrônicos | 4,5% | 3.640,71 |
| P010 | 16.112,86 | Tapete Yoga | Esporte | 2,0% | 322,26 |
| P002 | 68.018,78 | Monitor 27 | Eletrônicos | 4,5% | 3.060,85 |
| P005 | 48.957,16 | Mesa Ajustável | Escritório | 3,0% | 1.468,71 |
| P011 | 14.495,88 | Organizador | Casa | 2,0% | 289,92 |
| P003 | 64.832,80 | Teclado Mec | Eletrônicos | 4,5% | 2.917,48 |
Tabela 2.12. Resultado do Exercício 3. A comissão em reais (taxa × receita, `=E5#*B5:B12`) não é pedida no enunciado, mas foi calculada em aula.
O professor chama a atenção para a coluna Receita da aba: os valores digitados não batem com a base. A receita total do P001 em tbl_Vendas é 1.636.792,37, não 44.269,27. Num trabalho real, recalcule com =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[id_Produto]; A5) e gere a lista de códigos a partir da própria base (com ÚNICO, Capítulo 3), para não esquecer nenhum produto. Com as receitas reais do ano, seis dos oito produtos passam de 100.000 e ficariam com 6%; o Tapete Yoga (88.528,27) ficaria com 4,5% e o Organizador (43.333,66), com 3%.
Busca 2D: receita de um produto num mês. Duas dimensões (produto e mês) viram dois critérios de um SOMASES:
B19: =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Produto]; B17; tbl_Vendas[Mes]; B18) → 77.538,72
O Notebook Pro teve uma única venda em janeiro. A mesma resposta sai com =SOMARPRODUTO(tbl_Vendas[Receita]*(tbl_Vendas[Produto]=B17)*(tbl_Vendas[Mes]=B18)). Outros exemplos para testar: Cadeira Ergo em março, 43.178,86; Monitor 27 em agosto, 84.262,16.
Herdou um PROCV aninhado em SEERRO de três linhas? Peça a um assistente de IA: "explique esta fórmula passo a passo e reescreva com PROCX, no Excel em português, separador ponto e vírgula". Confira o resultado na planilha, linha por linha, antes de substituir: a IA às vezes troca nomes de funções entre idiomas ou erra o modo de correspondência.
- Converta bases em Tabela (Ctrl+T) e dê nomes com prefixo (
tbl_). Linhas novas entram sozinhas, colunas calculadas se preenchem e as fórmulas que apontam para a Tabela acompanham. - Referências estruturadas:
[@Coluna]é a linha atual;tbl[Coluna], a coluna inteira;[#Cabeçalhos]e[#Tudo]incluem o cabeçalho. - SES testa em cascata e para no primeiro verdadeiro; feche sempre com
VERDADEIRO; padrão. Limites ficam numa tabela de critérios, não dentro da fórmula. PARÂMETRO compara um valor com opções exatas. - E exige todas as condições; OU, ao menos uma; NÃO inverte. Elas devolvem VERDADEIRO/FALSO e não fazem soma condicional.
- SOMASES, CONT.SES e MÉDIASES respondem a maioria das perguntas: some, conte ou tire a média sob N condições, com intervalos do mesmo tamanho.
- SOMARPRODUTO multiplica e soma: pesos (Qtd × Preço) e condições que viram 1 e 0. Multiplicar condições é E; somar é OU.
- Leia o erro antes de tratar. Use SEERRO só onde o erro é esperado e lembre que o valor de substituição entra nas contas seguintes.
- PROCX: exato por padrão, retorno em qualquer direção,
se_não_encontradaembutido, modo -1 para faixas, retorno de várias colunas e busca do último para o primeiro. - Tabela dinâmica é ótima para explorar, mas trabalha sobre uma cópia da base e precisa ser atualizada; para relatório vivo, fórmulas.
- PROCV: saiba ler (chave na 1ª coluna, índice fixo, FALSO para exato) e reescreva com PROCX.
2.12Exercícios propostos
Use a base tbl_Vendas (aba Vendas) e as tabelas de apoio do arquivo do aluno.
- Qual a receita total da região Nordeste no ano? E quantas vendas ela teve?
- Qual a receita total de vendas da categoria Eletrônicos com quantidade a partir de 10 unidades?
- Qual o ticket médio (receita média por venda) do vendedor Hugo Barros em março?
- Escreva uma coluna calculada
Faixaem tbl_Vendas que classifique a quantidade: a partir de 20 unidades, "Atacado"; a partir de 10, "Lote"; abaixo de 10, "Varejo". Quantas vendas caem em cada faixa? - Usando SOMARPRODUTO, calcule a margem total (Qtd × (PrecoUnit − CustoUnit)) da região Sul.
- Com PROCX, traga o gerente da vendedora Gabriela Pinto, partindo do nome (aba Vendedores). Que argumento você usaria para mostrar "sem cadastro" se o nome não existir?
- Qual comissão a tabela de faixas daria para receitas de 19.999, 50.000 e 120.000? Escreva a fórmula para uma delas.
- Monte uma tabela dinâmica com Categoria nas Linhas, Receita em Valores e Regiao no Filtro. Qual a receita de Escritório no Sudeste?
- Uma planilha herdada tem
=PROCV(F2;Produtos!A:D;4;FALSO). O que ela devolve para F2 = "P009"? Reescreva com PROCX.
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 1 · Tools · Capítulo 3
Matrizes dinâmicas, texto e datas
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →Até aqui, cada fórmula respondia a uma célula. Neste capítulo a lógica muda: uma única fórmula responde a uma pergunta inteira e devolve quantas linhas e colunas forem necessárias. "Quais produtos foram vendidos no Sudeste e quanto cada um faturou?" deixa de ser uma coluna digitada mais uma fórmula arrastada até o fim e passa a ser duas fórmulas que se ajustam sozinhas quando a base muda. O professor resume a mudança numa frase: antes, uma fórmula por célula; agora, uma fórmula por pergunta.
O Capítulo 1 apresentou o despejo, a referência # e o erro #DESPEJAR!. Aqui você vai usar esse motor de verdade, com as funções que nasceram para ele: SEQUÊNCIA, ÚNICO, a família EMPILHAR, FILTRO e CLASSIFICAR. Com elas se monta um mini-simulador, um painel dirigido por um menu suspenso, sem macro. Na segunda metade, o mesmo espírito chega a texto e datas: separar nomes, extrair códigos e montar calendários com uma fórmula, em vez de cinco funções aninhadas. No meio do caminho fica um alerta: algumas funções clássicas, as voláteis, deixam a planilha lenta e difícil de auditar, e quase todas já têm substituto moderno.
- Ler e usar intervalos despejados como argumento de outras fórmulas, com a referência
#. - Gerar índices, escalas e listas com SEQUÊNCIA e listas de valores distintos com ÚNICO.
- Juntar colunas com EMPILHARH e acrescentar itens a uma lista com EMPILHARV.
- Extrair linhas de uma base com FILTRO, com um ou vários critérios, e ordenar com CLASSIFICAR.
- Montar um mini-simulador: lista dinâmica, menu suspenso e relatório que reage à escolha.
- Reconhecer as funções voláteis e trocá-las pelas alternativas modernas.
- Separar e juntar textos com DIVIDIRTEXTO, TEXTOANTES, TEXTODEPOIS, UNIRTEXTO e CONCAT.
- Calcular vencimentos, fechamentos e calendários com DATA, DATAM, FIMMÊS, DIATRABALHO e SEQUÊNCIA.
3.1O motor do despejo: uma fórmula por pergunta
Lembre o essencial do Capítulo 1: no Microsoft 365, uma fórmula pode devolver um intervalo inteiro, que derrama (spill) pelas células vizinhas; só a primeira célula guarda a fórmula, e B8# refere-se a todo o resultado, qualquer que seja o tamanho. O que muda agora é o uso. O intervalo despejado deixa de ser só um resultado e vira matéria-prima de outras fórmulas.
| Antes | Agora |
|---|---|
| Uma fórmula por célula | Uma fórmula por pergunta |
| Arrastar até o fim e lembrar de estender quando a base cresce | A matriz derrama sozinha e cresce com a base |
Fórmulas matriciais com Ctrl+Shift+Enter, entre chaves { } |
Enter comum; o resultado se refere com B8# |
Tabela 3.1. A virada das matrizes dinâmicas, segundo o slide de abertura da Sessão 3.
Três usos do # aparecem o tempo todo neste capítulo:
=SOMA(C8#) → soma tudo o que C8 despejou
=C8#/SOMA(C8#) → uma conta sobre cada item; derrama do mesmo tamanho
=SOMASES(tbl_Vendas[Receita];
tbl_Vendas[Produto];B8#) → um critério para cada item da lista; derrama alinhado
O terceiro é o mais poderoso. Quando você entrega a SOMASES (SUMIFS), vista no Capítulo 2, uma lista de critérios em vez de um só, ela devolve uma soma para cada item. O professor chama isso de "pegar carona" no despejo: a coluna de receita acompanha a lista de produtos, linha a linha, e cresce junto com ela.
Uma fórmula que derrama não funciona dentro de uma Tabela (Ctrl+T): o Excel devolve #DESPEJAR!. Tabelas trabalham linha a linha; o despejo trabalha com o bloco inteiro. Mantenha a base como Tabela (tbl_Vendas) e coloque os relatórios dinâmicos em células comuns, fora dela.
| Erro | Quando aparece | O que fazer |
|---|---|---|
#DESPEJAR! (#SPILL!) |
Há algo no caminho do resultado, ou a fórmula está dentro de uma Tabela | Limpar o caminho; tirar a fórmula da Tabela |
#CALC! |
FILTRO não encontrou nenhuma linha e não há o argumento se_vazio | Preencher o 3º argumento do FILTRO |
#N/D dentro do resultado |
EMPILHARH ou EMPILHARV juntou pedaços de tamanhos diferentes | Conferir as dimensões; tratar com SEERRO |
#NOME? |
Nome de função no idioma errado, ou nome de Tabela digitado diferente | Conferir idioma do Excel e Gerenciador de Nomes |
Tabela 3.2. Os erros mais comuns com matrizes dinâmicas.
3.2SEQUÊNCIA e ÚNICO
SEQUÊNCIA: índices, escalas e calendários
SEQUÊNCIA (SEQUENCE) gera uma grade de números. Os argumentos são linhas; [colunas]; [início]; [passo]; os três últimos são opcionais e valem 1 quando omitidos.
Sozinha, ela parece um brinquedo. O valor está em usá-la dentro de outras fórmulas: como contador de meses numa data, como número de linhas de um relatório ou como eixo de uma tabela de sensibilidade.
Situação: um modelo precisa de uma linha de cabeçalho com os percentuais de 0% a 100%, de 10 em 10, e de outra linha com N períodos, onde N é escolhido pelo usuário em C3.
=SEQUÊNCIA(1;11;0;10)% → 0% 10% 20% ... 100% (11 colunas)
=SEQUÊNCIA(1;C3) → 1 2 3 ... N (N colunas)
Na primeira, 11 colunas começando em 0 e andando de 10 em 10 vão até 100; o % no fim divide tudo por 100. Repare na conta de colunas: de 0 a 100 de 10 em 10 são 11 valores, não 10. Na segunda, mude C3 de 12 para 36 e o cabeçalho passa a ter 36 colunas, sem copiar nada.
ÚNICO: a lista que se atualiza sozinha
ÚNICO (UNIQUE) devolve os valores distintos de um intervalo. É a versão viva do Dados › Remover Duplicatas: o comando do menu age uma vez sobre uma cópia dos dados; a fórmula acompanha a base. Entrou um produto novo em tbl_Vendas, ele aparece na lista. Combinada com CLASSIFICAR (SORT), a lista sai em ordem.
Pergunta: quais vendedores, regiões e produtos aparecem na base de vendas, e quantos de cada?
=CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor])) → 8 nomes, de Ana Souza a Hugo Barros
=CLASSIFICAR(ÚNICO(tbl_Vendas[Regiao])) → Centro-Oeste, Nordeste, Norte, Sudeste, Sul
=CONT.VALORES(ÚNICO(tbl_Vendas[Produto])) → 12
As 560 linhas da base têm 8 vendedores, 5 regiões e 12 produtos distintos. A terceira fórmula conta os itens da lista sem precisar exibi-la. Use CONT.VALORES (COUNTA), e não CONT.NÚM: a lista é de textos.
Com mais de uma coluna, ÚNICO devolve as combinações distintas. =ÚNICO(EMPILHARH(tbl_Vendas[Vendedor];tbl_Vendas[Regiao])) devolve 8 pares, porque cada vendedor atua numa só região. Mas ÚNICO aplicado à base inteira devolve praticamente todas as 560 linhas: basta uma coluna diferente (a data, a receita) para a linha ser única. Para listar produtos, entregue a ÚNICO só a coluna de produtos.
CLASSIFICAR ordena textos caractere a caractere. Códigos como P1, P2, P10 e P1000 saem na ordem P1, P10, P1000, P2. Para ordenar códigos alfanuméricos pelo número, padronize a origem com zeros à esquerda (P0001, P0002...) ou ordene por uma coluna numérica.
3.3A família EMPILHAR
EMPILHARH (HSTACK) junta intervalos lado a lado; EMPILHARV (VSTACK) junta um sobre o outro. O resultado é uma única matriz, que derrama e pode entrar em qualquer outra fórmula.
EMPILHARH: a peça que faltava para ordenar
Volte à Figura 3.1. A lista de produtos e a receita vêm de duas fórmulas diferentes, em B8 e C8. Para ordenar os produtos pela receita, CLASSIFICAR precisa enxergar as duas colunas juntas, numa matriz só. É exatamente o que EMPILHARH faz.
CLASSIFICAR(matriz; [índice]; [ordem]) ordena pela coluna indicada no índice (1 é a primeira coluna da matriz). A ordem 1 é crescente, o padrão; −1 é decrescente.
Situação: com a região Norte escolhida, B8 lista os produtos em ordem alfabética e C8 traz a receita de cada um (as fórmulas estão no Exercício 1). Agora o relatório deve sair ordenado pela receita.
=CLASSIFICAR(EMPILHARH(B8#;C8#);2;-1)
EMPILHARH(B8#;C8#)monta uma matriz de 12 linhas e 2 colunas: produto e receita.CLASSIFICAR(...;2;-1)ordena pela 2ª coluna, a receita, do maior para o menor.
Resultado: Mesa Ajustável (256.416,27), Notebook Pro (146.304,47) e Monitor 27 (115.313,40) no topo; Squeeze Térmico (3.613,50) por último. O total do Norte, =SOMA(C8#), é 772.068,15. Sem o #, EMPILHARH(B8;C8) juntaria só as duas primeiras células.
Dentro do EMPILHARH cabem também as colunas da Tabela diretamente: =EMPILHARH(tbl_Vendas[Produto];tbl_Vendas[Receita]) devolve as 560 linhas da base com só essas duas colunas. É assim que se escolhe quais colunas um FILTRO vai devolver, como mostra a próxima seção.
Para usar só uma coluna de um resultado de várias colunas, a função ESCOLHERCOLS (CHOOSECOLS) devolve as colunas pedidas pelo número: =SOMA(ESCOLHERCOLS(E8#;2)) soma a 2ª coluna do intervalo que começa em E8. =ESCOLHERCOLS(tbl_Vendedores;2;4) traz só Vendedor e Gerente, e ;4;2 inverte a ordem.
EMPILHARV: acrescentar um item a uma lista
O uso clássico do EMPILHARV, consolidar bases de mesmo formato uma embaixo da outra, é o tema do Capítulo 4. Aqui ele aparece num papel menor e muito prático: colocar um item fixo no topo de uma lista dinâmica.
Situação: o menu suspenso de vendedores deve oferecer, como primeira opção, ver todos de uma vez.
=EMPILHARV("Todos os vendedores";CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor])))
Resultado: uma lista de 9 itens, com "Todos os vendedores" no topo e os 8 nomes em ordem logo abaixo. Como o pedaço de baixo continua sendo um ÚNICO, um vendedor novo na base entra na lista sem mexer em nada. A seção 3.5 mostra como o relatório trata essa opção.
EMPILHARH exige a mesma altura; EMPILHARV, a mesma largura. Se uma coluna tem 12 linhas e a outra 15, o resultado tem 15 linhas e as 3 que faltam viram #N/D. Às vezes isso é sintoma de erro (uma coluna veio de outra base); quando é esperado, =SEERRO(EMPILHARH(...);"") troca os #N/D por vazio.
3.4FILTRO e CLASSIFICAR
FILTRO (FILTER) devolve as linhas de um intervalo que atendem a uma condição:
=FILTRO(matriz; incluir; [se_vazio])
- matriz: o que devolver. Uma coluna, várias colunas montadas com EMPILHARH ou a Tabela inteira.
- incluir: um teste sobre uma coluna inteira, como
tbl_Vendas[Vendedor]=$C$5, que gera um VERDADEIRO ou FALSO para cada linha. - se_vazio: o que mostrar quando nenhuma linha passa. Sem ele, a fórmula devolve
#CALC!.
Dá para pensar no FILTRO como mais uma função de busca, ao lado do PROCV e do PROCX do Capítulo 2. A diferença é a quantidade: PROCV traz a primeira ocorrência; PROCX traz a primeira ou a última; FILTRO traz todas. É o mesmo filtro do menu Dados › Filtro, só que escrito como fórmula, sem esconder linhas da base e atualizado a cada mudança.
Pergunta: quais foram as vendas da Carla Reis, com produto e receita, e quanto somam?
=FILTRO(EMPILHARH(tbl_Vendas[Produto];tbl_Vendas[Receita]);
tbl_Vendas[Vendedor]="Carla Reis";
"Nenhuma venda encontrada")
Resultado: 72 linhas e 2 colunas, uma para cada venda, na ordem em que aparecem na base. A soma da 2ª coluna dá 700.442,46, o mesmo valor de =SOMASES(tbl_Vendas[Receita];tbl_Vendas[Vendedor];"Carla Reis"). Conferir um número por dois caminhos é um bom hábito. Com "Bruno Melo" o filtro devolve 70 linhas; com um nome que não existe, a mensagem do 3º argumento.
Vários critérios: multiplicar é E, somar é OU
O FILTRO tem um único argumento de condição. Para usar dois ou mais critérios, combine os testes com aritmética. Cada teste devolve uma coluna de VERDADEIRO/FALSO; em uma conta, VERDADEIRO vale 1 e FALSO vale 0. Multiplicar dois testes dá 1 só quando os dois são verdadeiros: é um E. Somar dá pelo menos 1 quando qualquer um é verdadeiro: é um OU.
E. Vendas da Carla Reis e do produto Organizador:
=FILTRO(tbl_Vendas[Receita];
(tbl_Vendas[Vendedor]="Carla Reis")*(tbl_Vendas[Produto]="Organizador");
0)
Devolve 9 vendas, que somam 9.112,65. Cada teste fica entre parênteses: sem eles, o Excel multiplica antes de comparar e a fórmula devolve #VALOR!.
OU. Vendas do Norte ou do Sul:
=FILTRO(tbl_Vendas[Receita];
(tbl_Vendas[Regiao]="Norte")+(tbl_Vendas[Regiao]="Sul"))
Devolve 223 linhas (80 do Norte e 143 do Sul), que somam 2.125.064,00.
A mesma mecânica funciona fora do FILTRO. =SOMA(tbl_Vendas[Receita]*(tbl_Vendas[Vendedor]="Carla Reis")*(tbl_Vendas[Produto]="Organizador")) também dá 9.112,65: as linhas que não passam nos testes são multiplicadas por zero. A diferença é que o FILTRO mostra as linhas, e a SOMA mostra só o total.
O professor usa FILTRO para recortes de leitura rápida. Exemplo típico: uma planilha de contas a receber com todas as faturas emitidas. Um FILTRO com (status="Em aberto")*(gerente=$C$3) mostra só o que está pendente do gerente escolhido, sem mexer na base e sem filtro manual para desfazer depois.
Se o FILTRO devolve 2 colunas quando encontra dados, a mensagem do se_vazio é uma célula só. Uma fórmula de fora que espere 2 colunas (ESCOLHERCOLS, um EMPILHARV com cabeçalho de 2 colunas) quebra com #N/D ou #VALOR! justamente no caso vazio. Faça o se_vazio ter o mesmo formato do resultado: EMPILHARH("Nenhuma venda encontrada";0) devolve uma linha com 2 colunas. O professor também mostrou a constante matricial {"Nenhuma venda encontrada";0} no Excel em inglês; em português o separador de colunas da constante é outro, por isso o EMPILHARH é o caminho mais seguro.
3.5Mini-simulador: ÚNICO, validação e FILTRO
Juntando as peças, nasce o mini-simulador: um menu suspenso que dirige um relatório inteiro. São três partes.
- A lista. Uma fórmula com ÚNICO e CLASSIFICAR numa célula auxiliar devolve as opções, sempre atualizadas.
- O controle. A validação de dados aponta para essa lista com
#e transforma uma célula num menu suspenso. - A resposta. Um FILTRO (ou SOMASES) lê a célula do menu e reescreve o relatório a cada escolha.
O ponto-chave é a origem da validação: =$I$6#. Com o #, a validação lê o despejo inteiro, e o menu cresce quando a lista cresce. Sem ele, a fonte fica presa a I6:I13 e um vendedor novo nunca aparece. O Capítulo 1 terminou com essa promessa; aqui ela se cumpre.
Digitar =tbl_Vendedores[Vendedor] na fonte da validação não funciona: a janela de validação não aceita referências estruturadas. Selecionar a coluna com o mouse funciona, mas grava um endereço fixo (por exemplo, =$C$3:$C$10), que não acompanha a Tabela. Os caminhos que mantêm a lista viva são a fórmula auxiliar com # ou um nome definido sobre ela: em Fórmulas › Gerenciador de Nomes › Novo, crie LST_Vendedores com a referência =$I$6# e use =LST_Vendedores como fonte. Esqueça o # no nome e ele aponta só para I6.
Situação: a lista em I6 é a do Exemplo 3.4, com "Todos os vendedores" no topo. Escolhida essa opção em C5, o relatório deve mostrar todas as vendas.
Na aula, o professor resolveu com um SE que escolhe entre duas fórmulas, uma com o filtro do vendedor e outra sem. Com a regra do OU da seção anterior, uma fórmula basta:
=CLASSIFICAR(
FILTRO(EMPILHARH(tbl_Vendas[Produto];tbl_Vendas[Receita]);
(tbl_Vendas[Vendedor]=$C$5)+($C$5="Todos os vendedores");
"sem dados");
2;-1)
O segundo teste não olha a base: é um único VERDADEIRO ou FALSO, que vale para todas as linhas. Com um vendedor escolhido, ele é FALSO e só o primeiro teste filtra. Com "Todos os vendedores", ele é VERDADEIRO e todas as 560 linhas passam.
Resultado: com "Todos os vendedores", o relatório lista as 560 vendas, a maior primeiro: Notebook Pro de 87.974,50, do Bruno Melo. Com "Bruno Melo", volta às 70 linhas dele.
Lista, menu e FILTRO formam um painel interativo que qualquer pessoa usa sem saber fórmulas: escolhe no menu e lê o resultado. Pinte a célula do menu com a cor de entrada do modelo e deixe as listas auxiliares numa coluna afastada ou numa aba Auxiliar.
3.6Funções voláteis e alternativas modernas
Uma função volátil é recalculada a cada alteração em qualquer célula da pasta, mesmo que nada do que ela usa tenha mudado. Algumas são voláteis por natureza: AGORA e HOJE precisam conferir o relógio; ALEATÓRIO sorteia um número novo a cada cálculo. Outras são voláteis porque o Excel não consegue saber de antemão de quais células dependem: DESLOC monta o endereço na hora, INDIRETO lê um endereço escrito em texto.
| Volátil | O que faz |
|---|---|
AGORA (NOW), HOJE (TODAY) |
Data e hora atuais / data atual |
ALEATÓRIO (RAND), ALEATÓRIOENTRE (RANDBETWEEN), MATRIZALEATÓRIA (RANDARRAY) |
Números aleatórios |
DESLOC (OFFSET) |
Referência deslocada a partir de uma âncora |
INDIRETO (INDIRECT) |
Transforma um texto em referência |
CÉL (CELL), INFO (INFO) |
Informações sobre a célula ou o ambiente |
Tabela 3.3. As funções voláteis citadas no slide.
Por que doem:
- Lentidão. Uma pasta com 100 mil INDIRETO recalcula 100 mil fórmulas a cada número digitado em qualquer lugar.
- Auditoria cega. A dependência fica escondida num texto ou num deslocamento. O F2+Esc e o rastreamento de precedentes não mostram de onde vem o número.
- Quebram com mudanças de estrutura. Um INDIRETO que monta
"Plan1!B5"não acompanha uma linha inserida nem uma aba renomeada.
=DESLOC(B6;2;1) → carla@atacado.com (2 linhas abaixo, 1 coluna à direita de B6)
=SOMA(DESLOC(C20;0;0;1;12)) → soma 12 colunas a partir de C20
=INDIRETO("T6_Texto!B"&6) → Souza, Ana
=INDIRETO("'"&B2&"'!D10") → D10 da aba cujo nome está em B2
Os dois últimos montam o endereço com &. Se o nome da aba tem espaço, ele vai entre aspas simples, e a fórmula vira um quebra-cabeça de aspas simples dentro de aspas duplas. Funciona, mas cada uma dessas células recalcula sempre.
O slide traz o mapa de substituição. Quase todo uso clássico das voláteis tem hoje uma solução mais leve e mais legível:
| Problema clássico | Solução antiga | Solução moderna |
|---|---|---|
| Intervalo que cresce | DESLOC com CONT.VALORES | Tabela (Capítulo 2) ou referência # |
| Últimos N meses | DESLOC | PEGAR / DESCARTAR (Capítulo 4) |
| Juntar dados de várias abas | INDIRETO com o nome da aba | EMPILHARV (Capítulo 4) |
| Lista de validação dinâmica | DESLOC num nome definido | ÚNICO despejado e =$I$6# (seção 3.5) |
| Escolher um cenário pelo nome | INDIRETO | ÍNDICE, PROCX ou um parâmetro |
Tabela 3.4. Voláteis: o problema e a solução moderna.
HOJE e AGORA têm uso legítimo: a idade de uma fatura ou o carimbo de "atualizado em" de um relatório precisam da data atual. Use-as uma vez, numa célula de parâmetro, e aponte o resto do modelo para essa célula. Se a data deve ficar fixa (a data de um lançamento), grave o valor com Ctrl+;. Para números aleatórios fixos, copie e cole como valores.
3.7Texto moderno
Bases chegam sujas: nome e sobrenome numa célula só, códigos com várias partes, e-mails dos quais só interessa o domínio. A caixa de ferramentas clássica resolve tudo, mas exige contar posições.
| Função (inglês) | O que faz | Exemplo com D6 = "NB-2024-001" |
|---|---|---|
ESQUERDA (LEFT) |
Primeiros n caracteres | =ESQUERDA(D6;2) → NB |
DIREITA (RIGHT) |
Últimos n caracteres | =DIREITA(D6;3) → 001 |
EXT.TEXTO (MID) |
n caracteres a partir de uma posição | =EXT.TEXTO(D6;4;4) → 2024 |
NÚM.CARACT (LEN) |
Quantidade de caracteres | =NÚM.CARACT(D6) → 11 |
LOCALIZAR (SEARCH) |
Posição de um texto, sem diferenciar maiúsculas | =LOCALIZAR("-";D6) → 3 |
PROCURAR (FIND) |
Posição de um texto, diferenciando maiúsculas | =PROCURAR("b";D6) → #VALOR! |
SUBSTITUIR (SUBSTITUTE) |
Troca um trecho por outro | =SUBSTITUIR(D6;"-";"/") → NB/2024/001 |
MAIÚSCULA / MINÚSCULA / PRI.MAIÚSCULA (UPPER / LOWER / PROPER) |
Muda a caixa | =PRI.MAIÚSCULA("ana souza") → Ana Souza |
ARRUMAR (TRIM) |
Remove espaços sobrando no início, no fim e repetidos no meio | =ARRUMAR(" Business Training ") → Business Training |
Tabela 3.5. Funções clássicas de texto. LOCALIZAR e PROCURAR também aceitam a posição inicial da busca, para achar a 2ª ocorrência.
Situação: B6 tem "Souza, Ana". Queremos o sobrenome e o nome em colunas separadas.
Caminho clássico: achar a vírgula e cortar em volta dela.
=ESQUERDA(B6;LOCALIZAR(",";B6)-1) → Souza
=ARRUMAR(EXT.TEXTO(B6;LOCALIZAR(",";B6)+1;NÚM.CARACT(B6))) → Ana
Caminho moderno: dizer qual é o separador.
=DIVIDIRTEXTO(B6;", ") → Souza | Ana (derrama em duas colunas)
DIVIDIRTEXTO (TEXTSPLIT) quebra o texto em todos os delimitadores e derrama um pedaço por coluna. O delimitador aqui é vírgula seguida de espaço. Com só ",", o nome sairia como " Ana", com um espaço na frente, e um PROCX por "Ana" não o encontraria.
O kit moderno do slide tem cinco funções:
DIVIDIRTEXTO(texto; delim_col; [delim_lin])(TEXTSPLIT): quebra em todos os delimitadores e derrama.TEXTOANTES(texto; delim; [ocorrência])(TEXTBEFORE): tudo antes do delimitador.TEXTODEPOIS(texto; delim; [ocorrência])(TEXTAFTER): tudo depois do delimitador.UNIRTEXTO(delim; ignorar_vazio; textos...)(TEXTJOIN): junta vários textos com um separador.CONCAT(textos...)(CONCAT): junta textos sem separador; faz o mesmo que o&.
O argumento ocorrência do TEXTOANTES e do TEXTODEPOIS diz qual delimitador usar quando há mais de um. Número negativo conta do fim para o começo: −1 é o último.
=DIVIDIRTEXTO(B6:B10;", ") não devolve uma tabela 5 × 2: o resultado de cada linha teria duas colunas, e a função entrega só o primeiro pedaço de cada uma. Há dois caminhos. Escreva DIVIDIRTEXTO em F6 e copie para baixo (cada cópia derrama em duas colunas), ou use TEXTOANTES e TEXTODEPOIS, que devolvem um pedaço só e aceitam a coluna inteira: =TEXTOANTES(B6:B10;", ") e =TEXTODEPOIS(B6:B10;", "). O Capítulo 4 mostra uma terceira via, com LAMBDA.
Lista numa célula. Todos os vendedores, separados por vírgula:
=UNIRTEXTO(", ";VERDADEIRO;CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor])))
→ Ana Souza, Bruno Melo, Carla Reis, Diego Farias, Elisa Cruz, Felipe Ramos, Gabriela Pinto, Hugo Barros
O VERDADEIRO manda ignorar células vazias. Trocando o separador por "@" dá para remontar o e-mail que TEXTOANTES e TEXTODEPOIS separaram.
Rótulo dinâmico. Com o vendedor em C5 e a receita total dele em F5:
="Receita de "&C5&": R$ "&TEXTO(F5;"#.##0,00")
→ Receita de Bruno Melo: R$ 530.944,04
A função TEXTO (TEXT) formata um número dentro de um texto com os mesmos códigos do Formatar Células (Capítulo 1). Para datas: ="Atualizado em "&TEXTO(AGORA();"dd/mm/aaaa hh:mm"). No Excel em inglês, o ano é yyyy.
Se parte da base usa ", " e parte usa "," ou dois espaços, o resultado sai com espaços sobrando e as buscas falham. Limpe antes com ARRUMAR, ou depois: =ARRUMAR(TEXTODEPOIS(B6;",")) funciona nos dois casos. Também evite "recuar" textos com espaços para criar hierarquia visual; use o botão Aumentar Recuo da Página Inicial, que muda a aparência sem sujar o conteúdo.
3.8Datas: o kit essencial
Datas são números (Capítulo 1): 01/01/2026 é o número 46.023. Por isso, somar dias é somar números. Somar meses, porém, não é somar 30: fevereiro tem 28 dias, outros meses 31. Para isso existe um kit próprio.
| Função (inglês) | O que faz | Exemplo | Resultado |
|---|---|---|---|
DATA (DATE) |
Monta a data com ano, mês e dia | =DATA(2026;1;1) |
01/01/2026 |
DATAM (EDATE) |
Avança ou recua n meses | =DATAM(DATA(2025;2;10);3) |
10/05/2025 |
FIMMÊS (EOMONTH) |
Último dia do mês, n meses à frente | =FIMMÊS(DATA(2025;2;10);0) |
28/02/2025 |
DIATRABALHO (WORKDAY) |
Avança n dias úteis, com feriados opcionais | =DIATRABALHO(DATA(2025;2;10);5) |
17/02/2025 |
DIATRABALHOTOTAL (NETWORKDAYS) |
Conta os dias úteis entre duas datas | =DIATRABALHOTOTAL(DATA(2026;1;1);DATA(2026;12;31)) |
261 |
ANO / MÊS / DIA (YEAR / MONTH / DAY) |
Extrai uma parte da data | =MÊS(DATA(2025;2;10)) |
2 |
Tabela 3.6. O kit de datas.
Dois truques valem decorar. FIMMÊS(data;-1)+1 é o primeiro dia do mês: o último dia do mês anterior, mais um. E DATA(ano;mês+1;0) também é o último dia do mês: o "dia zero" de um mês é o último dia do anterior.
Situação: uma projeção começa em janeiro de 2027 e o usuário escolhe em C3 quantos meses quer ver.
=DATA(2027;SEQUÊNCIA(1;C3);1) → 01/01/2027, 01/02/2027, ... (C3 colunas)
=DATA(2027;SEQUÊNCIA(1;C3)+1;0) → 31/01/2027, 28/02/2027, ... (fins de mês)
A SEQUÊNCIA entra no argumento mês da DATA. Quando o mês passa de 12, a DATA vira o ano sozinha: o mês 13 de 2027 é janeiro de 2028. Com C3 = 12, o cabeçalho vai de jan/27 a dez/27; com 120, vai até dez/36. Formate com mmm-aa (Ctrl+1).
No jeito antigo, escrevia-se a primeira data, uma fórmula para o mês seguinte e arrastava-se para a direita. Para passar de 3 para 5 anos era preciso arrastar de novo, com 59 fórmulas onde uma basta.
O slide mostra =SEQUÊNCIA(12;1;DATA(2026;1;1);1). Ela começa em 01/01/2026 e soma 1 por linha: o resultado são 12 dias seguidos, de 01/01 a 12/01/2026, um calendário diário. Para 12 meses, a SEQUÊNCIA vai dentro do argumento mês: =DATA(2026;SEQUÊNCIA(12);1). As duas estão certas; respondem a perguntas diferentes.
DATAM respeita o fim do mês. Uma parcela que vence todo dia 31, a partir de 31/01/2025:
=DATAM(DATA(2025;1;31);1) → 28/02/2025
=DATA(2025;1;31)+30 → 02/03/2025
Somar 30 dias passa de fevereiro; DATAM para no último dia de fevereiro. Por isso o professor recomenda DATAM e FIMMÊS para vencimentos e fechamentos.
Dias úteis. Uma emissão em 21/03/2025 com prazo de 10 dias úteis vence em =DIATRABALHO(DATA(2025;3;21);10) → 04/04/2025. O 3º argumento recebe uma lista de feriados; sem ela, a função desconta só sábados e domingos. Entre 01/01 e 31/12/2026 há 261 dias de segunda a sexta. A convenção de mercado no Brasil, 252 dias úteis por ano, já desconta os feriados nacionais. DIATRABALHO.INTL (WORKDAY.INTL) permite definir outros fins de semana.
As datas da base de vendas e da aba T6_Texto estão escritas como texto ("2025-01-10"). Diagnostique com =ÉNÚM(E6), que devolve FALSO. Converta com =DATA.VALOR(E6) (DATEVALUE) ou =--E6; em bases recorrentes, trate na origem, com Power Query. Outro detalhe: DATAM, FIMMÊS e DIATRABALHO não aceitam um intervalo como argumento. =FIMMÊS(C13#;0) dá #VALOR!. Transforme o intervalo em matriz, =FIMMÊS(--C13#;0), ou coloque a fórmula que gera as datas direto dentro da função.
Para extrações chatas ("tudo entre o segundo e o terceiro traço", "o domínio sem o .com.br"), descreva a um assistente de IA o texto de entrada, o resultado esperado e a versão do Excel ("Microsoft 365 em português, separador ponto e vírgula"). Peça a versão com TEXTOANTES e TEXTODEPOIS, que é mais fácil de conferir, e teste em três ou quatro linhas antes de aplicar na base.
3.9Exercícios resolvidos
Os três exercícios da Sessão 3 usam o arquivo EBP_Tools_2026_Aluno.xlsx, com a base tbl_Vendas (560 vendas de 2025). As células amarelas são as que o aluno preenche.
Exercício 1: resumo dinâmico por região (aba T5_Dinamicas1)
Tarefa: escolher uma região em C5 e, a partir de B8, listar os produtos vendidos nela com a receita de cada um, tudo dinâmico. Desafio: ordenar da maior para a menor receita e mostrar só o Top 3.
Passo 1: a lista de regiões e o menu. Numa coluna livre (I6), a lista das regiões; em C5, a validação de dados com fonte =$I$6#.
I6: =CLASSIFICAR(ÚNICO(tbl_Vendas[Regiao]))
Passo 2: os produtos da região. O FILTRO recorta a coluna de produtos pela região; o ÚNICO tira as repetições; o CLASSIFICAR põe em ordem alfabética.
B8: =CLASSIFICAR(ÚNICO(FILTRO(tbl_Vendas[Produto];tbl_Vendas[Regiao]=$C$5;"")))
Leia de dentro para fora: o FILTRO devolve os 131 produtos vendidos no Sudeste, um por venda; o ÚNICO reduz a 12; o CLASSIFICAR ordena.
Passo 3: a receita ao lado. Uma SOMASES com dois critérios, em que o critério de produto é a lista inteira, B8#:
C8: =SOMASES(tbl_Vendas[Receita];
tbl_Vendas[Produto];B8#;
tbl_Vendas[Regiao];$C$5)
Confira: =SOMA(C8#) dá 986.849,12, a receita total do Sudeste, igual a =SOMASES(tbl_Vendas[Receita];tbl_Vendas[Regiao];$C$5).
Sem o FILTRO, =CLASSIFICAR(ÚNICO(tbl_Vendas[Produto])) lista todos os produtos da base, inclusive algum que a região não tenha vendido, que apareceria com receita zero. Na base do curso, as 5 regiões venderam os 12 produtos, então as duas versões coincidem; numa base real, nem sempre.
Desafio: ordenar e cortar. Com EMPILHARH, a lista e a receita viram uma matriz de 2 colunas, que o CLASSIFICAR ordena pela 2ª coluna em ordem decrescente:
E8: =CLASSIFICAR(EMPILHARH(B8#;C8#);2;-1)
| # | Produto | Receita no Sudeste |
|---|---|---|
| 1 | Mesa Ajustável | 227.819,64 |
| 2 | Notebook Pro | 215.380,71 |
| 3 | Monitor 27 | 181.386,75 |
| 4 | Cadeira Ergo | 131.659,35 |
| 5 | Webcam HD | 64.885,96 |
| ... | ||
| 12 | Organizador | 8.468,65 |
| Total | 986.849,12 |
Tabela 3.7. Resultado do Exercício 1 para o Sudeste.
O Top 3 é o começo desse resultado. A função que corta as primeiras linhas, PEGAR (TAKE), é apresentada no Capítulo 4: =PEGAR(CLASSIFICAR(EMPILHARH(B8#;C8#);2;-1);3) devolve Mesa Ajustável, Notebook Pro e Monitor 27.
Com outras regiões, o Top 3 muda: no Nordeste, Notebook Pro (552.189,11), Monitor 27 (291.358,23) e Mesa Ajustável (267.734,07); no Sul, Notebook Pro (416.936,81), Mesa Ajustável (337.060,02) e Monitor 27 (254.448,03).
Dá para substituir B8# e C8# pelas próprias fórmulas e ter o relatório ordenado numa única célula, sem as colunas auxiliares. Funciona, mas a fórmula fica longa e repete o mesmo trecho (CLASSIFICAR(ÚNICO(FILTRO(...)))) duas vezes, o que o Excel calcula duas vezes. O professor deixa esse incômodo de propósito: a função LET, do Capítulo 4, resolve exatamente isso.
Exercício 2: mini-simulador de vendedor (aba T5_Dinamicas2)
Tarefa: criar em C5 um menu suspenso de vendedores, com a lista de origem em I6, e mostrar a partir de B8 o produto e a receita das vendas do vendedor, ordenados pela receita. Desafio: ao lado do menu, a receita total do vendedor (SOMASES) e o número de produtos distintos que ele vendeu (CONT.VALORES de ÚNICO).
Passo 1: a lista e o menu.
I6: =CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor]))
C5: Dados › Validação de Dados › Lista › Fonte: =$I$6#
Passo 2: o relatório. EMPILHARH escolhe as duas colunas; FILTRO fica só com as linhas do vendedor; CLASSIFICAR ordena pela 2ª coluna, decrescente.
B8: =CLASSIFICAR(
FILTRO(EMPILHARH(tbl_Vendas[Produto];tbl_Vendas[Receita]);
tbl_Vendas[Vendedor]=$C$5;
"sem dados");
2;-1)
Repare que o relatório mostra vendas, não produtos: Notebook Pro aparece várias vezes, uma para cada venda. Para ver a receita por produto do vendedor, use o padrão do Exercício 1, com o critério do vendedor no lugar da região:
E8: =CLASSIFICAR(ÚNICO(FILTRO(tbl_Vendas[Produto];tbl_Vendas[Vendedor]=$C$5)))
F8: =SOMASES(tbl_Vendas[Receita];tbl_Vendas[Produto];E8#;tbl_Vendas[Vendedor];$C$5)
Para o Bruno Melo, ordenando por receita, o Notebook Pro soma 137.841,99, a Mesa Ajustável 112.310,72 e o Monitor 27 72.970,75. A função AGRUPARPOR (GROUPBY), do Capítulo 4, faz esse agrupamento, a ordenação e o filtro numa fórmula só.
Desafio.
F5: =SOMASES(tbl_Vendas[Receita];tbl_Vendas[Vendedor];$C$5) → 530.944,04
F6: =CONT.VALORES(ÚNICO(FILTRO(tbl_Vendas[Produto];tbl_Vendas[Vendedor]=$C$5))) → 12
| Vendedor | Vendas | Receita total | Produtos distintos |
|---|---|---|---|
| Ana Souza | 63 | 550.397,59 | 12 |
| Bruno Melo | 70 | 530.944,04 | 12 |
| Carla Reis | 72 | 700.442,46 | 12 |
| Diego Farias | 80 | 772.068,15 | 12 |
| Elisa Cruz | 56 | 597.332,66 | 12 |
| Felipe Ramos | 80 | 802.598,26 | 12 |
| Gabriela Pinto | 61 | 455.905,08 | 12 |
| Hugo Barros | 78 | 864.760,42 | 12 |
Tabela 3.8. O painel para cada escolha do menu. Na base do curso, todos os vendedores venderam os 12 produtos; o número de vendas é `=CONT.SES(tbl_Vendas[Vendedor];$C$5)`.
Para a primeira linha do painel, o Exemplo 3.7 mostra como acrescentar a opção "Todos os vendedores" ao menu e ao relatório.
Exercício 3: texto e datas (aba T6_Texto)
Tarefa: numa pequena base de clientes, separar Sobrenome e Nome, extrair o domínio do e-mail e o código final do SKU, calcular o vencimento (+30 dias úteis) e montar o calendário do trimestre com SEQUÊNCIA e DATA. Desafio: montar a chave REGIAO-ANO com UNIRTEXTO e extrair o ano do vencimento com ANO.
Sobrenome e Nome. DIVIDIRTEXTO em F6, copiado até F10; cada cópia derrama em duas colunas.
F6: =DIVIDIRTEXTO(B6;", ") → Souza | Ana
A alternativa com uma fórmula por coluna: =TEXTOANTES(B6:B10;", ") em F6 e =TEXTODEPOIS(B6:B10;", ") em G6.
Domínio e código do SKU. Os dois aceitam a coluna inteira e derramam:
H6: =TEXTODEPOIS(C6:C10;"@") → empresa.com, lojasul.com.br, ...
I6: =TEXTODEPOIS(D6:D10;"-";-1) → 001, 014, 007, 030, 011
Na aula, o professor usou a ocorrência 2 (TEXTODEPOIS(D6;"-";2)), que dá o mesmo resultado nesses SKUs, todos com dois traços. A ocorrência −1 é mais robusta: continua pegando o último pedaço mesmo que algum SKU tenha mais traços. Note que "001" sai como texto, com os zeros à esquerda preservados; se precisar do número 1, use =--I6.
Vencimento. A emissão está como texto; DATA.VALOR converte e DIATRABALHO soma 30 dias úteis.
J6: =DIATRABALHO(DATA.VALOR(E6);30) → 21/02/2025 (copiar até J10)
| Cliente | Emissão | Vencimento (+30 dias úteis) |
|---|---|---|
| Souza, Ana | 10/01/2025 | 21/02/2025 |
| Melo, Bruno | 03/02/2025 | 17/03/2025 |
| Reis, Carla | 21/03/2025 | 02/05/2025 |
| Farias, Diego | 15/04/2025 | 27/05/2025 |
| Cruz, Elisa | 02/05/2025 | 13/06/2025 |
Tabela 3.9. Vencimentos do Exercício 3, sem lista de feriados. Com feriados no 3º argumento, as datas avançam.
Calendário do trimestre. Abaixo da base, uma célula de início (C12) e duas linhas despejadas: os meses e os fechamentos.
C12: 01/01/2025
C13: =DATA(ANO(C12);MÊS(C12)+SEQUÊNCIA(1;3)-1;1) → jan/25 fev/25 mar/25
C14: =DATA(ANO(C12);MÊS(C12)+SEQUÊNCIA(1;3);0) → 31/01/2025 28/02/2025 31/03/2025
Desafio: chave REGIAO-ANO. A aba não tem a região; ela está na Tabela de vendedores, e o nome do cliente coincide com o do vendedor. Remonte o nome na ordem "Nome Sobrenome" e busque com PROCX (Capítulo 2):
K6: =PROCX(G6&" "&F6;tbl_Vendedores[Vendedor];tbl_Vendedores[Regiao]) → Sul
L6: =UNIRTEXTO("-";VERDADEIRO;K6;ANO(J6)) → Sul-2025
As chaves saem Sul-2025, Sudeste-2025, Nordeste-2025, Norte-2025 e Centro-Oeste-2025. Chaves assim servem de critério único em SOMASES e PROCX quando a busca depende de dois campos ao mesmo tempo. =K6&"-"&ANO(J6) e =CONCAT(K6;"-";ANO(J6)) dão o mesmo resultado; UNIRTEXTO compensa quando há muitos campos e o mesmo separador entre todos.
- Com matrizes dinâmicas, cada pergunta vira uma fórmula. O intervalo despejado (
B8#) entra em outras fórmulas e as faz derramar alinhadas. - SEQUÊNCIA gera índices, escalas e eixos de datas; ÚNICO gera listas de distintos que acompanham a base. CONT.VALORES(ÚNICO(...)) conta os distintos.
- EMPILHARH junta colunas lado a lado (mesma altura); EMPILHARV empilha blocos (mesma largura). Tamanhos diferentes geram
#N/D. - FILTRO devolve todas as linhas que atendem à condição; o 3º argumento evita o
#CALC!. Testes multiplicados formam um E; somados, um OU. - CLASSIFICAR ordena por qualquer coluna da matriz (índice) em ordem crescente (1) ou decrescente (−1).
- Mini-simulador = lista com ÚNICO + validação com
=$I$6#+ relatório com FILTRO. Sem o#, o menu não cresce. - Voláteis (AGORA, HOJE, ALEATÓRIO, DESLOC, INDIRETO, CÉL, INFO) recalculam sempre e escondem a lógica. Prefira Tabela,
#, PEGAR/DESCARTAR, EMPILHARV e ÍNDICE. - DIVIDIRTEXTO, TEXTOANTES e TEXTODEPOIS separam pelo delimitador, sem contar posições; a ocorrência −1 conta do fim. UNIRTEXTO e CONCAT juntam; TEXTO formata números dentro de frases.
- DATAM e FIMMÊS avançam meses e acham fechamentos sem errar no tamanho do mês; DIATRABALHO conta dias úteis; DATA com SEQUÊNCIA no mês monta cabeçalhos mensais de qualquer tamanho.
3.10Exercícios propostos
Use a base tbl_Vendas do arquivo EBP_Tools_2026_Aluno.xlsx e a aba T6_Texto.
- Liste as categorias de produto distintas, em ordem alfabética, com uma fórmula. Quantas são?
- Ao lado da lista do exercício 1, calcule a receita de cada categoria com uma única fórmula despejada e depois ordene categoria e receita da maior para a menor receita.
- Com FILTRO, liste as vendas do Norte com receita acima de 20.000. Quantas são e quanto somam?
- Escreva a fórmula que devolve as vendas do Sudeste ou do Nordeste, com produto e receita. Quantas linhas ela devolve?
- Monte, com uma fórmula, o cabeçalho com os últimos dias dos meses de julho a dezembro de 2026. Quais são as datas?
- Na aba T6_Texto, extraia de C7 ("bruno@lojasul.com.br") só o nome da loja, "lojasul", e de D8 ("TC-2025-007") o ano, como número.
- Uma nota emitida em 21/03/2025 tem três prazos possíveis: 2 meses, fim do mês da emissão e 10 dias úteis. Calcule as três datas.
- Junte numa única célula as regiões da base, em ordem alfabética, separadas por "; ".
- Destas fórmulas, quais são voláteis?
=HOJE()-B2,=SOMA(C6:C10),=DESLOC(A1;3;0),=PROCX(B2;tbl_Produtos[Produto];tbl_Produtos[CustoUnit]),=INDIRETO("B"&C1). Que alternativa você usaria para=SOMA(DESLOC(A1;0;0;CONT.VALORES(A:A);1))?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 1 · Tools · Capítulo 4
Consolidar, automatizar e analisar
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →As três primeiras sessões do Tools encheram a caixa de ferramentas: navegação, Tabelas, SOMASES, PROCX, e as fórmulas que derramam resultados, como ÚNICO, FILTRO e CLASSIFICAR. Esta última sessão do módulo junta essas peças em três movimentos que aparecem em quase todo trabalho com dados. Primeiro, consolidar: reunir bases que estão espalhadas em várias abas numa fonte única e viva. Depois, dar legibilidade: escrever fórmulas longas de um jeito que você, ou um colega, consiga ler daqui a seis meses. Por fim, analisar e apresentar: resumir a base, escolher o gráfico certo e destacar o que importa.
O fio condutor é uma frase do checkpoint da sessão: "o júnior refaz; o sênior constrói uma vez e deixa a planilha trabalhar". Cada técnica do capítulo troca um trabalho manual e repetitivo (copiar blocos, ajustar intervalos, atualizar uma tabela dinâmica) por uma fórmula que se ajusta sozinha quando a base cresce.
- Consolidar bases de mesma estrutura com EMPILHARV, referência 3D e Tabelas, e entender por que o INDIRETO saiu de cena.
- Recortar o começo ou o fim de um intervalo com PEGAR e DESCARTAR.
- Comparar vários caminhos para a mesma resposta e reconhecer os que falham e por quê.
- Dar nome às etapas de uma fórmula com LET e criar funções próprias com LAMBDA e MAP.
- Resumir uma base com AGRUPARPOR e PIVOTPOR e saber quando preferir a tabela dinâmica.
- Escolher o gráfico pela mensagem e destacar exceções com formatação condicional.
- Montar um painel de uma aba só com o kit moderno.
4.1Consolidar não é buscar cinco vezes
Imagine uma empresa com cinco unidades de negócio (SBUs, do inglês strategic business units). Cada unidade tem a sua aba, com as vendas na mesma estrutura: produto, mês e receita. A diretoria quer a receita por produto somando as cinco. O reflexo antigo é ir buscar a informação cinco vezes: um PROCV em cada base, um INDIRETO montando o nome de cada aba, ou cinco blocos copiados e colados um embaixo do outro. Funciona até o dia em que entra uma linha nova numa das abas e ninguém lembra de estender o bloco.
O caminho moderno inverte a ordem: primeiro empilhe, depois pergunte. Uma fórmula junta as cinco bases numa só, e todas as perguntas (FILTRO, SOMASES, AGRUPARPOR) passam a ser feitas sobre essa fonte única.
=EMPILHARV(matriz1; matriz2; ...) coloca as matrizes uma embaixo da outra e devolve o resultado num único intervalo despejado. A irmã EMPILHARH (HSTACK), do Capítulo 3, coloca lado a lado.
Com as bases transformadas em Tabelas nomeadas, a consolidação do slide cabe numa linha:
=EMPILHARV(tbl_SBU1; tbl_SBU2; tbl_SBU3; tbl_SBU4; tbl_SBU5)
Como cada Tabela cresce sozinha, uma venda nova lançada na SBU3 aparece no consolidado na mesma hora, e tudo o que depende dele recalcula. É o que o slide chama de "uma fonte única e viva".
EMPILHARV não confere o que está empilhando. Se uma base tem as colunas Produto, Mês e Receita e outra tem Vendedor, Data e Quantidade, o resultado sai torto, sem aviso. Empilhar é o que em bancos de dados se chama append: acrescentar registros novos embaixo dos que já existem, e isso só faz sentido com o mesmo número de colunas, na mesma ordem. Se as bases têm colunas diferentes, empilhe só as colunas comuns (com ESCOLHERCOLS, adiante) ou trate a origem antes.
O professor começou a demonstração com o caso mais simples possível, duas sequências, para mostrar o comportamento das duas funções de empilhar quando os blocos não têm o mesmo tamanho.
Em B6 está =SEQUÊNCIA(12) (1 a 12, numa coluna) e em D6, =SEQUÊNCIA(15;1;101) (101 a 115).
=EMPILHARV(B6#; D6#) → 27 linhas: 1 a 12 e, embaixo, 101 a 115
=EMPILHARH(B6#; D6#) → 15 linhas × 2 colunas; B tem só 12 valores
=SEERRO(EMPILHARH(B6#; D6#); "") → as 3 células que sobram ficam vazias
Resultado: na versão horizontal, as linhas 13 a 15 da primeira coluna aparecem como #N/D: a primeira sequência simplesmente não tem esses valores. SEERRO (IFERROR) troca o erro por vazio (ou por zero, se preferir). Repare também no #: sem ele, EMPILHARV(B6; D6) empilharia só as duas células de origem, e não os intervalos despejados inteiros.
Empilhar também serve para listas de menu
EMPILHARV não é só para bases grandes. Um uso que aparece em quase todo simulador é acrescentar uma opção fixa no topo de uma lista dinâmica.
Situação: o menu suspenso de vendedores deve começar com "Todos os vendedores" e continuar crescendo sozinho quando entrar um vendedor novo na base.
I6: =EMPILHARV("Todos os vendedores"; CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor])))
Na validação de dados (Lista), a fonte é =$I$6#.
Resultado: nove opções: "Todos os vendedores" e, em ordem alfabética, os oito vendedores da base (Ana Souza a Hugo Barros). Como a lista vem de ÚNICO, um vendedor novo entra no menu sem ninguém editar a validação. A fórmula que usa o menu precisa tratar a opção nova; o Exemplo 4.7 faz isso com LET.
Nos arquivos do curso, a Tabela de vendas aparece como tbl_Vendas, seguindo o prefixo tbl_ do Capítulo 1. No arquivo EBP_Tools_2026_Aluno.xlsx, ela foi criada com o nome Vendas: renomeie em Design da Tabela › Nome da Tabela para que as fórmulas deste capítulo funcionem como estão escritas. Os cabeçalhos dessa base não têm acento (Regiao, Mes, PrecoUnit, CustoUnit), e a fórmula precisa usar o nome exato.
Referência 3D: somar a mesma célula em várias abas
Quando as abas têm o mesmo layout, célula por célula, existe um atalho antigo e eficiente: a referência 3D. Ao digitar =SOMA(, clique na aba SBU1, segure Shift, clique na aba SBU5 e depois na célula. O Excel escreve:
=SOMA('SBU1:SBU5'!D47)
Isso soma D47 de todas as abas entre SBU1 e SBU5, na ordem em que estão na barra de abas. É o recurso usado no Exercício 1 para consolidar a DRE das cinco unidades. EMPILHARV também aceita referência 3D: =EMPILHARV('SBU1:SBU5'!D47:J47) devolve as cinco linhas, uma de cada aba, uma embaixo da outra.
Uma aba nova arrastada para entre SBU1 e SBU5 entra na soma sem aviso; uma aba movida para fora sai. Mantenha as abas consolidadas juntas e, se precisar de uma aba de rascunho, deixe-a fora do intervalo.
O enterro do INDIRETO
Antes das matrizes dinâmicas, a forma clássica de "buscar em várias abas" era o INDIRETO. Vale entendê-lo, porque ele aparece em muitas planilhas herdadas.
Transforma um texto num endereço. =INDIRETO("SBU2!F47") devolve o conteúdo da célula F47 da aba SBU2. Como o texto pode ser montado com &, a aba ou a célula podem vir de outras células: =INDIRETO($B15&"!"&C$12).
O detalhe que confunde: digitar =SBU2!F47 numa célula traz o valor de F47, porque o Excel reconhece um endereço. Mas montar o mesmo texto com ="SBU2"&"!F47" devolve só o texto SBU2!F47. O INDIRETO é o jeito de dizer ao Excel "isto não é um texto, é um endereço: vá lá e traga o que estiver". Nomes de aba com espaço precisam de aspas simples dentro do texto ("'Vendas 2025'!B3"), o que leva a sequências como aspas duplas, aspas simples e aspas duplas na mesma fórmula, difíceis de ler e fáceis de errar.
Há três motivos para aposentá-lo:
- É volátil. Recalcula a cada alteração em qualquer célula da pasta (ver as funções voláteis do Capítulo 3). Mil INDIRETOs numa coluna de 100 mil linhas pesam no arquivo inteiro.
- É frágil. O endereço está escrito como texto, então o Excel não o atualiza: renomeie a aba SBU2 ou insira uma linha acima de F47 e a fórmula passa a apontar para o lugar errado, ou devolve
#REF!. - Não deixa rastro. O F2 + Esc do Capítulo 1 não ilumina a origem de um INDIRETO, e as ferramentas de auditoria não conseguem seguir a referência.
A aba Analise_Consolidada do Exercício 1 é uma "aba-museu": um simulador montado com CORRESP, ENDEREÇO e INDIRETO. A resolução mostra a versão antiga e a versão com EMPILHARV, lado a lado, com os mesmos números.
Uma tentação natural é transformar o resultado do EMPILHARV numa Tabela para usar nomes de coluna no SOMASES. Não funciona: uma Tabela aceita dados fixos ou fórmulas linha a linha, mas não um intervalo derramado, e o Excel devolve #DESPEJAR!. Ou o consolidado é fórmula (e você o referencia com #), ou é dado estático. A consolidação estática, com botão de atualizar, é o terreno do Power Query, que também resolve o caso de dezenas de arquivos numa pasta.
ESCOLHERCOLS: pegar só as colunas que interessam
O consolidado devolve todas as colunas das bases. Para trabalhar com uma só (a lista de produtos, por exemplo), não é preciso empilhar de novo coluna por coluna.
=ESCOLHERCOLS(matriz; nº_col1; nº_col2; ...) devolve só as colunas pedidas, na ordem pedida. =ESCOLHERCOLS(J4#; 1) traz a primeira coluna do consolidado em J4; =ESCOLHERCOLS(J4#; 3; 1) traz a terceira e a primeira, nessa ordem. A versão para linhas é ESCOLHERLINS (CHOOSEROWS).
Com ela, a lista de produtos de todas as SBUs sai do consolidado: =CLASSIFICAR(ÚNICO(ESCOLHERCOLS(J4#; 1))). Aplicar ÚNICO direto sobre J4# não resolveria: com três colunas, ÚNICO procura linhas repetidas (mesmo produto, mesmo mês e mesma receita), e quase nenhuma se repete.
4.2PEGAR e DESCARTAR
Duas perguntas comuns em relatórios são "quais são os três maiores?" e "como foram os últimos seis meses?". Antes, elas exigiam DESLOC (OFFSET) e contas de posição. Hoje cabem em duas funções.
=PEGAR(matriz; linhas; [colunas]) devolve as primeiras linhas (ou colunas) de uma matriz. =DESCARTAR(matriz; linhas; [colunas]) joga essas linhas fora e devolve o resto. O sinal manda: número positivo conta do começo; negativo, do fim.
| Fórmula | Devolve |
|---|---|
=PEGAR(X; 3) |
as 3 primeiras linhas de X |
=PEGAR(X; -3) |
as 3 últimas linhas |
=DESCARTAR(X; 1) |
tudo menos a primeira linha (um cabeçalho, por exemplo) |
=DESCARTAR(X; -2) |
tudo menos as 2 últimas linhas |
=DESCARTAR(X; 0; -4) |
todas as linhas, sem as 4 últimas colunas |
=PEGAR(X; 1000) |
se X tem 12 linhas, as 12: pedir mais do que existe não dá erro |
Tabela 4.1. PEGAR e DESCARTAR. Numa lista de 12 linhas, `DESCARTAR(X; -9)` e `PEGAR(X; 3)` dão o mesmo resultado.
PEGAR é especialmente útil depois de um CLASSIFICAR: com a lista já ordenada, "top 3" é só pegar as três primeiras linhas.
Situação: em C5 há um menu com a região (Sudeste). Queremos os três produtos de maior receita nessa região, com a receita ao lado.
B8: =CLASSIFICAR(ÚNICO(tbl_Vendas[Produto]))
E8: =PEGAR(
CLASSIFICAR(
EMPILHARH(B8#;
SOMASES(tbl_Vendas[Receita];
tbl_Vendas[Produto]; B8#;
tbl_Vendas[Regiao]; C5));
2; -1);
3)
- EMPILHARH junta a lista de produtos e a receita de cada um numa matriz de duas colunas.
- CLASSIFICAR ordena pela coluna 2 (a receita), em ordem decrescente (−1).
- PEGAR fica com as três primeiras linhas.
Resultado: Mesa Ajustável (227.819,64), Notebook Pro (215.380,71) e Monitor 27 (181.386,75). Trocando o 3 por −3, a fórmula devolve os três últimos da lista ordenada: Tapete Yoga (18.230,05), Squeeze Térmico (15.289,80) e Organizador (8.468,65). Ponha o 3 numa célula com validação de dados e o usuário escolhe o tamanho do ranking.
Situação: em B6:B17 estão os meses Jan a Dez, digitados. Queremos a receita mensal e, dela, só os seis últimos meses.
C6: =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Mes]; B6:B17)
E6: =PEGAR(EMPILHARH(B6:B17; C6#); -6)
E13: =SOMA(PEGAR(C6#; -6))
Resultado: Jul 468.184,47; Ago 590.623,63; Set 520.067,84; Out 316.943,70; Nov 411.464,17; Dez 497.862,32. A soma do segundo semestre é 2.805.146,13. Com uma lista de meses dinâmica (gerada da base, em ordem de data), a janela de seis meses anda sozinha quando entra o mês seguinte. Era para isso que se usava DESLOC, que é volátil.
DESCARTAR é o par natural para limpar exportações: =DESCARTAR(Base; 1) tira uma primeira linha de lixo que o sistema exporta acima dos cabeçalhos; =DESCARTAR(tbl_Vendas[#Tudo]; 0; -4) traz a base inteira, com cabeçalho, sem as quatro últimas colunas.
4.3Vários caminhos para o mesmo problema
O slide 52 faz uma pergunta só, "qual a receita por produto?", e compara as respostas. A mensagem é que não existe "a" fórmula certa: existem escolhas, cada uma com prós e contras, e algumas que parecem funcionar mas estão erradas. Ver o erro e entender por que ele acontece fixa o conceito melhor do que decorar a fórmula boa.
=SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Produto]; "Notebook Pro")
=SOMARPRODUTO((tbl_Vendas[Produto]="Notebook Pro")*tbl_Vendas[Receita])
=SOMA(FILTRO(tbl_Vendas[Receita]; tbl_Vendas[Produto]="Notebook Pro"))
=SOMA((tbl_Vendas[Produto]="Notebook Pro")*tbl_Vendas[Receita])
Resultado: as quatro devolvem 1.636.792,37 (40 vendas). As duas do meio usam a mecânica do Capítulo 3: o teste tbl_Vendas[Produto]="Notebook Pro" gera VERDADEIRO ou FALSO linha a linha, e a multiplicação zera as receitas das outras linhas. Um quinto caminho, AGRUPARPOR, entrega a receita de todos os produtos de uma vez (seção 4.6).
Na consolidação das SBUs, os mesmos caminhos ganham uma camada a mais: a base é o resultado de um EMPILHARV, e não uma Tabela. Aí aparecem as diferenças.
| Caminho | Situação | Avaliação |
|---|---|---|
SOMARPRODUTO sobre a base |
funciona | leve e sem Ctrl+Shift+Enter; exige intervalos do mesmo tamanho |
SOMA((ESCOLHERCOLS(J4#;1)=B7)*ESCOLHERCOLS(J4#;3)) |
funciona | lê o consolidado vivo; recalcula o empilhamento inteiro (pesado em bases grandes) |
SOMA(FILTRO(...)) |
funciona | a forma mais legível; cria uma matriz intermediária a cada linha |
SOMASES numa SBU só |
engana | funciona, mas a resposta é parcial: soma uma unidade e ignora as outras quatro |
SOMASES(tbl_SBU1[Receita]; tbl_SBU2[Produto]; B7) |
falha | mistura duas SBUs: intervalos de tamanhos diferentes dão #VALOR! |
SOMASES(ESCOLHERCOLS(J4#;3); ESCOLHERCOLS(J4#;1); B7) |
falha | SOMASES exige intervalos de verdade, e ESCOLHERCOLS devolve uma matriz calculada; o slide registra o erro como #CALC! |
Tabela 4.2. Os caminhos do slide 52 para a receita por produto na base consolidada. J4# é o consolidado e B7, o produto.
O #VALOR! de misturar duas SBUs ao menos avisa. Se as duas Tabelas tivessem, por coincidência, o mesmo número de linhas, o SOMASES somaria a receita de uma unidade usando os produtos da outra, sem erro nenhum, e o número estaria errado. Por isso a regra do capítulo: consolide primeiro e pergunte depois, sempre sobre a fonte única.
As funções da família SES (SOMASES, CONT.SES, MÉDIASES) nasceram antes das matrizes dinâmicas e pedem referências nos argumentos de intervalo. Elas aceitam um despejo como critério (SOMASES(...; B7#) funciona e derrama uma soma por produto), mas não aceitam uma matriz calculada no lugar do intervalo somado. Quando isso acontece, os caminhos são: trocar por SOMA(...*...) ou FILTRO, como na Tabela 4.2; ou usar AGRUPARPOR, que já resolve a soma por grupo.
Para a lista de produtos de uma base que cresce, há três escolhas. J4:J200 é exato e leve, mas para de funcionar quando a base passa da linha 200. J:J nunca fica curto, mas manda o Excel ler um milhão de linhas e traz um zero no fim (a célula vazia). J4:J1000 é um meio-termo que exige alguém conferir de tempos em tempos se a base chegou perto do limite. O despejo (J4#) e as Tabelas eliminam o dilema: o intervalo tem sempre o tamanho exato.
4.4LET: nomes de negócio na fórmula
À medida que as fórmulas modernas vão sendo combinadas (EMPILHARH dentro de CLASSIFICAR dentro de PEGAR, com SOMASES no meio), elas ficam difíceis de ler. E muitas vezes repetem o mesmo trecho duas ou três vezes, o que obriga o Excel a fazer a mesma conta de novo. O LET resolve as duas coisas.
=LET(nome1; valor1; nome2; valor2; ...; cálculo) dá nome a etapas intermediárias dentro da fórmula. Os argumentos vêm em pares (nome, valor), e o último argumento é o que a fórmula devolve. Cada nome pode usar os nomes definidos antes dele.
O professor descreve o LET como "uma carta para o seu eu do futuro". Uma fórmula de cinco linhas densas exige um trabalho de detetive para ser entendida; a mesma fórmula com etapas nomeadas se explica sozinha: calcule a receita, calcule o custo, a margem é a diferença.
Situação: acrescentar à Tabela de vendas uma coluna Margem Bruta, com receita e custo explícitos.
=LET(
receita; [@Qtd]*[@PrecoUnit];
custo; [@Qtd]*[@CustoUnit];
receita - custo)
Quebre as linhas com Alt+Enter, como no Capítulo 1. Ao digitar rec na terceira linha, o Excel já oferece o nome receita no autocompletar: ele reconhece as variáveis, mas só dentro desta fórmula.
Resultado: na primeira venda da base (8 unidades de Notebook Pro a R$ 3.187,50, custo unitário de R$ 2.400,00), a margem é 25.500,00 − 19.200,00 = 6.300,00. Somada a coluna inteira, a margem bruta da base é 1.573.188,66, 29,8% da receita de 5.274.448,66.
Nesse caso o LET deixa a fórmula mais legível, mas não mais rápida: cada parte é usada uma vez. O ganho de desempenho aparece quando um trecho se repete. Toda vez que você for escrever o mesmo pedaço pela segunda vez, nomeie-o numa variável e use o nome.
Situação: em C5, o menu do Exemplo 4.2 (com a opção "Todos os vendedores"). A partir de B8, a lista dos produtos que o vendedor escolhido vendeu e a receita de cada um, do maior para o menor.
B8: =LET(
produtos; tbl_Vendas[Produto];
receita; tbl_Vendas[Receita];
vendedores; tbl_Vendas[Vendedor];
escolhido; C5;
lista_vend; ÚNICO(FILTRO(produtos; (vendedores=escolhido)*(receita>0)));
rec_vend; SOMASES(receita; produtos; lista_vend; vendedores; escolhido);
lista_geral; ÚNICO(FILTRO(produtos; receita>0));
rec_geral; SOMASES(receita; produtos; lista_geral);
tab_vend; CLASSIFICAR(EMPILHARH(lista_vend; rec_vend); 2; -1);
tab_todos; CLASSIFICAR(EMPILHARH(lista_geral; rec_geral); 2; -1);
SE(escolhido="Todos os vendedores"; tab_todos; tab_vend))
Leia de cima para baixo: primeiro os nomes das colunas da base; depois o vendedor escolhido; depois a lista e a receita do vendedor e as do total; por fim, as duas tabelas ordenadas e a decisão de qual delas mostrar. Sem LET, a mesma lógica exigiria repetir o trecho ÚNICO(FILTRO(...)) dentro do SOMASES e duplicar a fórmula inteira dentro de um SE para tratar a opção "Todos".
Resultado: com Hugo Barros, a fórmula devolve os 12 produtos, de Notebook Pro (257.248,19), Monitor 27 (196.077,20) e Cadeira Ergo (152.832,79) até Organizador (3.368,78); a soma da segunda coluna é 864.760,42, a receita total do vendedor. Com "Todos os vendedores", a primeira linha passa a ser Notebook Pro com 1.636.792,37, e a soma vai a 5.274.448,66. O filtro receita>0 deixa de fora produtos sem venda, que de outro modo apareceriam com zero.
Os nomes do LET não podem coincidir com um endereço de célula. C1, X2 ou SBU1 são endereços válidos (a coluna SBU existe no Excel), e a fórmula devolve erro. Prefira nomes de negócio, com letras e sublinhado: receita, lista_vend, tab_todos. Se um erro de #NOME? aparecer depois de renomear variáveis, procure um nome antigo esquecido no meio da fórmula.
Na Barra de Fórmulas, selecione só um trecho da fórmula (o valor de uma variável, por exemplo) e tecle F9: o Excel mostra o resultado daquele trecho. Tecle Esc para sair sem gravar. É a forma mais rápida de descobrir qual etapa de um LET está errada. Fórmulas › Avaliar Fórmula faz o mesmo passo a passo.
4.5LAMBDA, MAP e o critério de escolha
Se o LET dá nome às partes de uma fórmula, o LAMBDA dá nome ao todo: com ele você cria a sua própria função, que passa a ser usada como SOMA ou PROCX. Antes, isso exigia VBA.
=LAMBDA(parâmetro1; parâmetro2; ...; cálculo) define uma função. Os primeiros argumentos são os nomes dos parâmetros; o último é o cálculo. Salva no Gerenciador de Nomes (Fórmulas › Gerenciador de Nomes › Novo), ela ganha um nome e pode ser chamada em qualquer célula da pasta de trabalho.
Testar na célula. Um LAMBDA solto devolve #CALC!, porque não recebeu valores. Para testar, passe os valores entre parênteses logo depois:
=LAMBDA(x; x*2)(10) → 20
=LAMBDA(r; c; (r-c)/r)(100; 70) → 0,3
Salvar com nome. Em Fórmulas › Gerenciador de Nomes › Novo, crie:
| Nome | Refere-se a |
|---|---|
Dobra |
=LAMBDA(x; x*2) |
MargemPadrão |
=LAMBDA(r; c; (r-c)/r) |
A partir daí, =Dobra(15) devolve 30, e a margem do Notebook Pro sai assim:
=MargemPadrão(1636792,37; 1159200) → 29,2%
Resultado: receita de 1.636.792,37 e custo de 1.159.200,00 (483 unidades a R$ 2.400,00) dão margem de 29,2%. Se a regra de cálculo mudar (incluir impostos, por exemplo), você altera a definição uma vez no Gerenciador de Nomes, e todas as células que usam MargemPadrão acompanham.
O uso mais poderoso é empacotar um modelo inteiro. A fórmula do Exemplo 4.7 só depende de uma entrada, o vendedor. Envolvida num LAMBDA, ela vira a função ResumoVendedor:
ResumoVendedor =LAMBDA(vendedor;
LET(produtos; tbl_Vendas[Produto];
...
escolhido; vendedor;
...))
Depois de salva, =ResumoVendedor("Carla Reis") monta a tabela inteira da vendedora numa célula, e =ResumoVendedor(C5) a amarra a um menu. Numa planilha de financiamento, a tabela completa de prestações poderia ser uma LAMBDA que recebe valor, taxa e prazo.
Na aula, a primeira versão do ResumoVendedor devolvia sempre o mesmo vendedor, qualquer que fosse o argumento. O motivo: dentro do LET continuava escrito escolhido; C5, e não escolhido; vendedor. Ao transformar uma fórmula em LAMBDA, substitua toda referência à célula de entrada pelo nome do parâmetro. Use Ctrl+setas dentro da fórmula para percorrê-la e confira.
As LAMBDAs ficam salvas na pasta de trabalho onde foram criadas. Para usar a mesma função em outro arquivo, copie a definição do Gerenciador de Nomes (ou uma célula que a use) para o novo arquivo.
MAP: aplicar a mesma conta a cada item de uma lista
=MAP(lista; LAMBDA(item; cálculo)) percorre a lista e aplica a LAMBDA a cada elemento, devolvendo um resultado por item, do mesmo tamanho da lista.
O slide mostra =MAP(prod; LAMBDA(p; SOMASES(...; p))). Para uma soma por produto, SOMASES com B8# como critério já derrama o resultado sem MAP. O MAP vale a pena quando a conta de cada item não aceita uma lista inteira de uma vez: um FILTRO com critério por item, uma LAMBDA própria, uma sequência de etapas.
Situação: em H6 está =CLASSIFICAR(ÚNICO(tbl_Vendas[Produto])). Ao lado, a margem bruta percentual de cada produto, usando a função do Exemplo 4.8.
I6: =MAP(H6#; LAMBDA(p;
LET(f; tbl_Vendas[Produto]=p;
receita; SOMA(FILTRO(tbl_Vendas[Receita]; f));
custo; SOMA(FILTRO(tbl_Vendas[Qtd]*tbl_Vendas[CustoUnit]; f));
MargemPadrão(receita; custo))))
Sem o MAP, FILTRO(...; tbl_Vendas[Produto]=H6#) tentaria comparar 560 linhas com 12 produtos de uma vez, e o resultado não faria sentido. Com o MAP, o FILTRO roda uma vez para cada produto.
Resultado: as margens ficam entre 28,6% (Suporte Notebook) e 31,6% (Teclado Mec); Notebook Pro, 29,2%; Mesa Ajustável, 29,9%; Cadeira Ergo e Tapete Yoga, 31,2%.
Qual ferramenta usar?
Com tantas opções, o slide 55 propõe um critério simples: use a ferramenta mais simples que resolve o problema.
| Situação | Ferramenta |
|---|---|
| Fórmula simples | o básico (SOMA, SOMASES, PROCX) |
| Fórmula densa, com etapas ou trechos repetidos | LET |
| Cálculo recorrente, usado em muitos lugares | LAMBDA nomeada |
| Mesma conta para cada item de uma lista | MAP |
| Muitas fontes, arquivos, tratamento de dados (ETL) | Power Query |
| Automação, eventos, rotinas | VBA |
Tabela 4.3. Critério de escolha do slide 55. Power Query e VBA são os temas do módulo de Automatização.
4.6Análise: tabela dinâmica e AGRUPARPOR
A tabela dinâmica, vista no Capítulo 2, continua sendo a forma mais rápida de explorar uma base: arrastar campos, trocar a soma por média, filtrar. O limite dela é a atualização: a tabela dinâmica lê a base, guarda uma cópia e só enxerga mudanças quando alguém clica em Atualizar. Para um relatório recorrente, isso é um risco. As funções AGRUPARPOR e PIVOTPOR fazem o mesmo trabalho em forma de fórmula: recalculam sozinhas e podem entrar dentro de outras fórmulas.
| Tabela dinâmica | AGRUPARPOR / PIVOTPOR | |
|---|---|---|
| Atualização | manual (Atualizar) | automática (é fórmula) |
| Montagem | arrastar campos, rápida para explorar | escrever os argumentos |
| Uso em outra fórmula | difícil | direto: PEGAR, LET, CLASSIFICAR por cima |
| Filtro por menu da planilha | por segmentação ou filtro do relatório | argumento de filtro amarrado a uma célula |
| Versão do Excel | todas | Microsoft 365 atual |
Tabela 4.4. Tabela dinâmica × funções de resumo.
=AGRUPARPOR(campos_linha; valores; função; [cabeçalhos]; [total]; [ordem]; [filtro]) agrupa os valores pelos campos de linha e aplica a função (SOMA, MÉDIA, CONT.VALORES, MÁXIMO, MÍNIMO...). É uma tabela dinâmica de uma linha só.
| Argumento | O que controla | Valores usados no capítulo |
|---|---|---|
| campos_linha | coluna(s) que viram as linhas | uma coluna, ou EMPILHARH(col1; col2) para duas |
| valores | coluna a resumir | tbl_Vendas[Receita] |
| função | operação | SOMA (escrita sem parênteses) |
| cabeçalhos | se há cabeçalho na seleção e se deve mostrá-lo | 0: sem cabeçalho |
| total | linha de total | 0 sem total; 1 total geral (padrão); 2 total e subtotais; -1 total no topo |
| ordem | coluna e sentido da ordenação | 2 crescente pela 2ª coluna; -2 decrescente |
| filtro | linhas que entram no cálculo | tbl_Vendas[Regiao]=C5 |
Tabela 4.5. Argumentos de AGRUPARPOR.
Situação: em C5, o menu de regiões (Nordeste); em C6, o tamanho do ranking (3).
=PEGAR(
AGRUPARPOR(tbl_Vendas[Produto]; tbl_Vendas[Receita]; SOMA;
0; ← sem cabeçalho
0; ← sem total
-2; ← ordena pela receita, decrescente
tbl_Vendas[Regiao]=C5); ← só a região escolhida
C6)
Resultado: Notebook Pro (552.189,11), Monitor 27 (291.358,23) e Mesa Ajustável (267.734,07). Com C6 = −3, os três piores: Tapete Yoga (20.883,08), Organizador (12.481,43) e Squeeze Térmico (8.533,74). Compare com o Exemplo 4.3: lá foram precisos ÚNICO, SOMASES, EMPILHARH e CLASSIFICAR; aqui o AGRUPARPOR agrupa, soma, ordena e filtra sozinho, e o PEGAR só recorta. Com o total ligado, PEGAR "comeria" a linha de total, por isso o 0 no quinto argumento.
Para ter duas colunas de resultado (receita e quantidade, por exemplo), passe as duas em valores com EMPILHARH. Já duas colunas em campos_linha mudam o agrupamento: cada combinação vira uma linha (Região e Categoria, no desafio do Exercício 2).
PIVOTPOR: linhas e colunas
Uma base guardada do jeito certo tem uma coluna para cada campo e uma linha para cada registro: é o formato bom para armazenar. Para ler, muitas vezes queremos o formato "pivotado", com uma dimensão nas linhas e outra nas colunas.
=PIVOTPOR(tbl_Vendas[Regiao]; tbl_Vendas[Categoria]; tbl_Vendas[Receita]; SOMA)
Os argumentos são os da tabela dinâmica: o que vai nas linhas, o que vai nas colunas, que valor resumir e com qual função. Os totais de linha e de coluna vêm ligados por padrão.
| Região | Casa | Eletrônicos | Escritório | Esporte | Total |
|---|---|---|---|---|---|
| Centro-Oeste | 11.065,49 | 408.350,24 | 166.396,52 | 11.520,41 | 597.332,66 |
| Nordeste | 43.398,38 | 979.216,33 | 513.171,35 | 29.416,82 | 1.565.202,88 |
| Norte | 28.180,53 | 377.361,74 | 353.883,49 | 12.642,39 | 772.068,15 |
| Sudeste | 32.325,42 | 531.516,52 | 389.487,33 | 33.519,85 | 986.849,12 |
| Sul | 31.392,89 | 817.194,07 | 465.901,04 | 38.507,85 | 1.352.995,85 |
| Total | 146.362,71 | 3.113.638,90 | 1.888.839,73 | 125.607,32 | 5.274.448,66 |
Tabela 4.6. Resultado do Exemplo 4.11. Eletrônicos responde por 59% da receita.
Resultado: a mesma matriz que uma tabela dinâmica daria, mas viva. Se a quarta posição da função mudar de SOMA para MÉDIA, ou o filtro for amarrado a um menu, o quadro se refaz na hora.
Uma tabela dinâmica ou um PIVOTPOR com os meses escritos como texto ("Jan", "Fev"...) ordena as colunas em ordem alfabética: Abr, Ago, Dez... Para uma ordem cronológica, agrupe por uma data de verdade ou pelo número do mês. Na base Vendas, a coluna Data está como texto no formato 2025-03-28; MÊS(tbl_Vendas[Data]+0) converte e extrai o mês (1 a 12), como no case do Exercício 3.
AGRUPARPOR, PIVOTPOR, PEGAR, DESCARTAR, EMPILHARV, LET, LAMBDA e MAP exigem o Microsoft 365 atualizado. Num Excel mais antigo, a fórmula devolve #NOME?; se o arquivo vai circular por uma empresa com versões diferentes, prefira a tabela dinâmica clássica ou ÚNICO + SOMASES. O mesmo #NOME? aparece quando o nome da função está no idioma errado (GROUPBY num Excel em português) ou quando o nome de uma Tabela foi digitado diferente do que está no Gerenciador de Nomes. Se o argumento de função SOMA der problema, escreva-o por extenso como LAMBDA: LAMBDA(x; SOMA(x)).
4.7Gráfico certo e destaque visual
Um resumo bem calculado ainda precisa ser lido. Dois recursos fazem essa ponte: o gráfico, escolhido pela mensagem, e a formatação condicional, que chama a atenção para a exceção.
O gráfico pela mensagem
Antes de inserir um gráfico, pergunte qual é a mensagem. O tipo vem dela.
| Mensagem | Gráfico |
|---|---|
| Comparar categorias (regiões, produtos, vendedores) | colunas ou barras |
| Mostrar evolução no tempo | linhas |
| Mostrar composição de um todo, com poucas partes | pizza (até 4 ou 5 fatias) |
| Mostrar relação entre duas variáveis | dispersão (ou bolhas, com uma terceira) |
Tabela 4.7. O gráfico pela mensagem. Pizza com 12 fatias é ilegível: use barras ordenadas.
Para inserir: selecione os dados (ou uma célula do intervalo despejado) e vá em Inserir › Gráficos Recomendados, ou escolha o tipo direto. Um gráfico feito sobre um intervalo despejado acompanha o despejo: se uma região nova aparecer na base, ela entra no gráfico. Tire o que não ajuda a ler (linhas de grade em excesso, legenda com uma série só, a linha de total, que achataria as outras colunas) e escreva no título a conclusão, não só o assunto.
Formatação condicional por fórmula
A formatação condicional (Página Inicial › Formatação Condicional) tem regras prontas (escalas de cor, barras de dados, conjuntos de ícones, "maior que", "abaixo da média") e uma opção mais flexível: Nova Regra › Usar uma fórmula para determinar quais células devem ser formatadas. A fórmula é escrita para a primeira célula do intervalo selecionado e deve devolver VERDADEIRO nas células que serão pintadas.
- Selecione A6:B10 (região e receita).
- Formatação Condicional › Nova Regra › Usar uma fórmula...
- Fórmula:
=$B6<MÉDIA($B$6:$B$10). Clique em Formatar e escolha um preenchimento.
Resultado: Centro-Oeste (597.332,66), Norte (772.068,15) e Sudeste (986.849,12) ficam destacadas, porque estão abaixo da média de 1.054.889,73. O $ antes do B é o ponto central: ao avaliar a célula A7, a regra continua olhando a coluna B, e por isso a linha inteira é pintada, não só a receita. Sem o $, a regra aplicada a A7 compararia a própria célula A7 (um texto) com a média.
Um despejo pode crescer, mas a área da regra é fixa. Aplique a regra a uma área maior que o resultado atual (A6:B30, por exemplo), com =E($B6<>""; $B6<MÉDIA($B$6:$B$30)). MÉDIA ignora as células vazias, e o teste $B6<>"" evita pintar as linhas em branco. O mesmo raciocínio vale para destacar até onde vai um intervalo: um fundo cinza claro onde há valor deixa claro onde o despejo termina.
Para completar o painel, um filtro por menu: a lista do menu vem de =CLASSIFICAR(ÚNICO(tbl_Vendas[Regiao])) numa célula auxiliar, e a fonte da validação é essa célula com #. É a validação dinâmica antecipada no Capítulo 1: a lista se atualiza sozinha.
4.8Exercícios resolvidos
Os exercícios usam dois arquivos. A consolidação das SBUs está no EBP_Tools_Arquivo3@2026.xlsx (abas SBU1 a SBU5, Consolidado e Analise_Consolidada). A análise e o case usam a base Vendas do EBP_Tools_2026_Aluno.xlsx, com 560 vendas de 2025. As células amarelas são as de resposta.
Exercício 1: consolidar as cinco SBUs (Arquivo3, abas Consolidado e Analise_Consolidada)
Contexto. Cada aba SBU1 a SBU5 tem o modelo financeiro de uma unidade de negócio, com projeções de 2024 a 2030E, e todas têm exatamente o mesmo layout: a Receita Bruta está na linha 47, a Receita Líquida na 51, o Lucro bruto na 55, e assim por diante; os anos estão em D45:J45. É o cenário ideal para consolidar sem buscar aba por aba.
Tarefa 1 (aba Consolidado). Montar a DRE consolidada das cinco unidades.
A aba Consolidado repete o layout da DRE, 35 linhas acima: a Receita Bruta está na linha 12 do Consolidado e na 47 das SBUs. A referência 3D resolve as linhas de valor:
D12: =SOMA('SBU1:SBU5'!D47) → copiar para D12:J12 e para as demais linhas de valor
O nome da aba aparece entre aspas simples porque "SBU1" também é um endereço de célula válido (coluna SBU, linha 1); o Excel coloca as aspas para não confundir.
As linhas de valor (receita, custo, lucro) se somam. As linhas de percentual não: somar a relação Custo/Receita Líquida das cinco SBUs daria −81,2% em 2026E, um número sem sentido. O certo é recalcular a relação a partir dos totais consolidados: =F17/F16 dá −17,9%. O mesmo vale para Devoluções (%) e Margem bruta (%). Numa DRE consolidada, toda linha de índice é refeita sobre as linhas somadas.
| Consolidado | 2024 | 2025 | 2026E | 2028E | 2030E |
|---|---|---|---|---|---|
| Receita Bruta | 27.101.970 | 47.386.165 | 64.696.200 | 114.163.662 | 168.019.883 |
| Receita Líquida | 25.746.871 | 45.253.787 | 61.849.567 | 109.597.115 | 161.299.087 |
| Lucro bruto | 21.049.024 | 37.084.423 | 50.762.460 | 91.557.859 | 135.364.605 |
| Margem bruta (%) | 81,8% | 81,9% | 82,1% | 83,5% | 83,9% |
| Lucro líquido | (893.179) | (354.005) | 1.076.302 | 12.208.306 | 28.638.827 |
Tabela 4.8. Linhas selecionadas da DRE consolidada (R$). 2027E e 2029E foram omitidos.
Tarefa 2 (aba Analise_Consolidada). "Crie um simulador que consolide os dados": escolhido o ano em C8, a tabela B14:J20 mostra oito indicadores de cada SBU (Receita Bruta, Receita Líquida, Lucro bruto, Lucro operacional, Lucro líquido, Total dívida, Caixa e FCFF) e o consolidado.
O jeito antigo (aba-museu). A aba já traz as linhas auxiliares que denunciam o método. Para cada indicador, CORRESP (MATCH) acha a coluna do ano e a linha do indicador na SBU1; ENDEREÇO (ADDRESS) transforma os dois números num texto como "F47"; e INDIRETO junta o nome da aba com esse texto e vai buscar o valor.
C10: =CORRESP($C8; 'SBU1'!$45:$45; 0) → 6 (coluna F)
C11: =CORRESP(C14; 'SBU1'!$B:$B; 0) → 47 (linha da Receita Bruta)
C12: =ENDEREÇO(C11; C10; 4) → F47
C15: =INDIRETO($B15&"!"&C$12) → copiar para C15:J19
Funciona, e o resultado está certo. Mas são 40 funções voláteis, três linhas auxiliares e uma dependência escondida: nada na fórmula de C15 mostra, para o F2 + Esc, de onde vem o número. O Total dívida ainda exige um caso especial, porque soma três linhas (98 a 100), e o endereço vira um intervalo de texto ("F98:F100") dentro de um SOMA(INDIRETO(...)).
O jeito moderno. Como as abas têm o mesmo layout, EMPILHARV com referência 3D traz a linha do indicador das cinco SBUs de uma vez, uma linha por SBU e uma coluna por ano. PROCX escolhe a coluna do ano:
C15: =PROCX($C$8; 'SBU1'!$D$45:$J$45; EMPILHARV('SBU1:SBU5'!$D$47:$J$47))
O PROCX procura "2026E" na linha dos anos e, como a matriz de retorno tem cinco linhas, devolve a coluna inteira daquele ano: os cinco valores derramam em C15:C19. Nas outras colunas, troca-se só a linha (51, 55, 65, 79, 87 e 190). Para o Total dívida, somam-se as três matrizes:
H15: =PROCX($C$8; 'SBU1'!$D$45:$J$45;
EMPILHARV('SBU1:SBU5'!$D$98:$J$98) +
EMPILHARV('SBU1:SBU5'!$D$99:$J$99) +
EMPILHARV('SBU1:SBU5'!$D$100:$J$100))
| 2026E | Receita Bruta | Lucro operacional | Lucro líquido | Total dívida | FCFF |
|---|---|---|---|---|---|
| SBU1 | 19.500.000 | 1.859.560 | 999.762 | 1.025.373 | 261.714 |
| SBU2 | 5.056.200 | 1.352.443 | 743.783 | 575.673 | 124.430 |
| SBU3 | 19.500.000 | 3.646.414 | 2.051.551 | 179.600 | 355.082 |
| SBU4 | 12.000.000 | (2.348.868) | (2.866.883) | 9.369.172 | (3.386.008) |
| SBU5 | 8.640.000 | 467.016 | 148.089 | 3.034.376 | (558.816) |
| Consolidado | 64.696.200 | 4.976.565 | 1.076.302 | 14.184.194 | (3.203.598) |
Tabela 4.9. Simulador com C8 = 2026E (R$). As duas versões, com INDIRETO e com EMPILHARV, dão os mesmos números.
A leitura do simulador já é análise de negócio: em 2026E, a SBU4 tem receita de R$ 12 milhões, mas prejuízo operacional e a maior dívida do grupo, e é ela que leva o FCFF consolidado para o negativo. Troque C8 para 2028E e o quadro muda: o consolidado passa a ter FCFF de 7.510.176 e Lucro líquido de 12.208.306.
A parte de baixo da aba (linhas 27 a 31) pede a análise de uma SBU escolhida em C27. No kit moderno, uma fórmula em C30 traz a linha inteira: =PROCX($C$27; $B$15:$B$19; $C$15:$J$19). Com SBU2, a linha mostra 5.056.200 de Receita Bruta e 743.783 de Lucro líquido, pronta para um gráfico de colunas contra o total da linha 31.
Exercício 2: análise e apresentação (aba T8_Exercicio)
Tarefa. Transformar a base num painel de resumo com destaque visual: (1) receita por região com AGRUPARPOR (ou ÚNICO + SOMASES); (2) gráfico adequado à mensagem; (3) validação dinâmica com ÚNICO para um filtro; (4) formatação condicional destacando as regiões abaixo da média. Desafio: AGRUPARPOR com duas dimensões (Região e Categoria) e linha de total.
No arquivo do aluno a aba se chama T8_Exercicio e a resposta começa em A6; nos slides, o mesmo exercício aparece como T9_Analise.
1. Resumo por região.
A6: =AGRUPARPOR(tbl_Vendas[Regiao]; tbl_Vendas[Receita]; SOMA; 0; 0)
O 0 no quarto argumento diz que não há cabeçalho na seleção; o 0 no quinto desliga a linha de total, que atrapalharia o gráfico e a média. O caminho alternativo, sem AGRUPARPOR, são duas fórmulas: =CLASSIFICAR(ÚNICO(tbl_Vendas[Regiao])) em A6 e =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Regiao]; A6#) em B6.
2. Gráfico. A mensagem é comparar regiões: colunas. Selecione A6:B10 › Inserir › Colunas Agrupadas. O resultado é o da Figura 4.6. Ordenar pela receita (sexto argumento −2) deixaria o gráfico ainda mais fácil de ler.
3. Filtro com validação dinâmica. Em G6, a lista de regiões: =CLASSIFICAR(ÚNICO(tbl_Vendas[Regiao])). Em D6, a validação de dados (Lista) com fonte =$G$6#. Em D8, o detalhe por categoria da região escolhida, usando o argumento de filtro:
D8: =AGRUPARPOR(tbl_Vendas[Categoria]; tbl_Vendas[Receita]; SOMA; 0; 0; -2;
tbl_Vendas[Regiao]=D6)
4. Destaque. A regra do Exemplo 4.12 sobre A6:B10: =$B6<MÉDIA($B$6:$B$10).
| Região | Receita total | vs. média |
|---|---|---|
| Centro-Oeste | 597.332,66 | abaixo |
| Nordeste | 1.565.202,88 | acima |
| Norte | 772.068,15 | abaixo |
| Sudeste | 986.849,12 | abaixo |
| Sul | 1.352.995,85 | acima |
| Média | 1.054.889,73 |
Tabela 4.10. Resultado do Exercício 2. Com Nordeste no menu, o detalhe mostra Eletrônicos 979.216,33; Escritório 513.171,35; Casa 43.398,38; Esporte 29.416,82.
Repare na leitura: o Sudeste, que muita gente apostaria como a maior região, está abaixo da média; Nordeste e Sul, juntos, respondem por 55% da receita.
Desafio: duas dimensões e total. Duas colunas em campos_linha (com EMPILHARH) e total geral ligado:
I6: =AGRUPARPOR(EMPILHARH(tbl_Vendas[Regiao]; tbl_Vendas[Categoria]);
tbl_Vendas[Receita]; SOMA; 0; 1)
Com o argumento total igual a 2, o AGRUPARPOR acrescenta também um subtotal por região. A mesma informação, em formato de matriz, é o PIVOTPOR do Exemplo 4.11.
Exercício 3: case integrador, um painel de uma aba
Briefing. "Você recebeu a base bruta de vendas. Sua gestora quer um painel de UMA aba", com: base estruturada em Tabela; relatório por vendedor com FILTRO + EMPILHARH + CLASSIFICAR, controlado por seleção; resumo mensal com SOMASES ou AGRUPARPOR; um gráfico adequado; uma fórmula documentada com LET. Proibido: PROCV, DESLOC, INDIRETO e fórmulas matriciais antigas (Ctrl+Shift+Enter). Só o kit moderno.
A resolução abaixo usa a base Vendas do arquivo do aluno e uma aba nova, Painel.
Passo 1: a base. A base já está numa Tabela; basta conferir o nome (tbl_Vendas, como no box da seção 4.1). Se a base viesse solta, Ctrl+T e um nome com prefixo resolveriam.
Passo 2: seleção e indicadores. Em M5, a lista de vendedores, =CLASSIFICAR(ÚNICO(tbl_Vendas[Vendedor])); em C4, o menu com fonte =$M$5#. Os indicadores:
C6: =SOMASES(tbl_Vendas[Receita]; tbl_Vendas[Vendedor]; C4) → 700.442,46
C7: =CONT.SES(tbl_Vendas[Vendedor]; C4) → 72
C8: =C6/C7 → 9.728,37
Passo 3: relatório controlado pela seleção. As dez maiores vendas do vendedor, com data, produto, quantidade e receita:
E6: =PEGAR(
CLASSIFICAR(
FILTRO(EMPILHARH(tbl_Vendas[Data]; tbl_Vendas[Produto];
tbl_Vendas[Qtd]; tbl_Vendas[Receita]);
tbl_Vendas[Vendedor]=C4);
4; -1);
10)
EMPILHARH escolhe as colunas que interessam, FILTRO recorta o vendedor, CLASSIFICAR ordena pela quarta coluna (receita) em ordem decrescente e PEGAR fica com as dez primeiras.
Passo 4: resumo mensal documentado com LET. O mês sai da coluna Data, que está como texto: somar zero converte o texto em data, e MÊS extrai o número do mês, que ordena corretamente (ao contrário de "Jan", "Fev"...).
J6: =LET(
data_txt; tbl_Vendas[Data];
mes; MÊS(data_txt+0);
receita; tbl_Vendas[Receita];
do_vend; tbl_Vendas[Vendedor]=C4;
AGRUPARPOR(mes; receita; SOMA; 0; 1; 1; do_vend))
O quinto argumento (1) acrescenta o total geral, que confere com C6; o sexto (1) ordena pelo mês, crescente.
Passo 5: gráfico. A mensagem do resumo mensal é a evolução no tempo: linhas. Selecione os 12 meses (sem a linha de total) e insira um gráfico de linhas. O gráfico mostra uma vendedora com dois picos, em março e setembro, e meses fracos no começo do ano e em novembro.
| Mês | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Receita (mil) | 6,3 | 16,4 | 147,9 | 70,3 | 40,0 | 41,3 | 50,1 | 41,5 | 124,0 | 72,4 | 14,8 | 75,3 |
Tabela 4.11. Resumo mensal de Carla Reis (R$ mil). Total do ano: 700.442,46.
Conferência do briefing. Tabela (tbl_Vendas); relatório com FILTRO + EMPILHARH + CLASSIFICAR (e PEGAR) controlado pelo menu; resumo mensal com AGRUPARPOR; gráfico de linhas para evolução; fórmula documentada com LET. Nenhuma função proibida. Troque o vendedor no menu e o painel inteiro se refaz: indicadores, relatório, resumo e gráfico. Construído uma vez, ele trabalha sozinho.
Cole uma fórmula densa num assistente de IA (Claude, ChatGPT, Copilot) e peça: "reescreva com LET, dando nomes de negócio às etapas, para o Excel em português, com ponto e vírgula". É um bom ponto de partida para refatorar planilhas herdadas, e também para diagnosticar um erro de #NOME? ou de argumento. Confira sempre o resultado na planilha, comparando o número da fórmula nova com o da antiga, antes de apagar a original.
O caminho à frente
O Tools termina aqui, mas várias perguntas deste capítulo ficam com resposta melhor nos módulos seguintes:
- Power Query: consolidar dezenas de arquivos de uma pasta, tratar bases sujas e atualizar tudo com um clique (Atualizar Tudo). É a resposta para "e se forem 80 tabelas?".
- Modelagem: usar estas peças para construir o modelo dos três demonstrativos, simuladores, Atingir Meta e Tabela de Dados, Monte Carlo, Solver e cadeias de Markov.
- VBA: automação por eventos e rotinas dentro do Excel.
- IA para análise: quando pedir código a um assistente e quando resolver com fórmula.
- Consolidar é empilhar uma vez e perguntar depois:
EMPILHARV(tbl_SBU1; ...; tbl_SBU5)cria uma fonte única e viva. As bases precisam ter a mesma estrutura. - A referência 3D (
SOMA('SBU1:SBU5'!D47)) soma a mesma célula em abas de layout idêntico; EMPILHARV também aceita referência 3D. - INDIRETO transforma texto em endereço, mas é volátil, frágil a renomeações e invisível para a auditoria. EMPILHARV, Tabelas e PROCX o substituem.
- ESCOLHERCOLS escolhe colunas de um despejo; PEGAR e DESCARTAR recortam o começo (n positivo) ou o fim (n negativo) e substituem o DESLOC.
- Há vários caminhos para a mesma resposta. SOMASES exige intervalos de verdade: falha sobre matrizes calculadas e, misturando bases, dá
#VALOR!ou, pior, um número errado sem aviso. - LET nomeia as etapas de uma fórmula, evita contas repetidas e documenta o raciocínio; o último argumento é o resultado.
- LAMBDA cria funções próprias salvas no Gerenciador de Nomes; MAP aplica uma LAMBDA a cada item de uma lista.
- AGRUPARPOR e PIVOTPOR são a tabela dinâmica em forma de fórmula: recalculam sozinhas, aceitam filtro, ordem e total, e entram em outras fórmulas. Exigem o Microsoft 365 atual.
- O gráfico vem da mensagem (colunas para comparar, linhas para tempo); a formatação condicional por fórmula, com a coluna travada, pinta a linha inteira da exceção.
4.9Exercícios propostos
Use a base Vendas do EBP_Tools_2026_Aluno.xlsx (Tabela renomeada para tbl_Vendas) e, nos itens 8 e 9, o EBP_Tools_Arquivo3@2026.xlsx.
- Com AGRUPARPOR, monte a receita por vendedor, sem total, ordenada da maior para a menor. Quem lidera e com quanto? Quem fecha o ranking?
- Com PEGAR sobre o resultado do item 1, mostre só os três primeiros vendedores. Qual fórmula mostraria os dois últimos?
- Calcule a receita do produto Monitor 27 por três caminhos diferentes (SOMASES, SOMARPRODUTO e SOMA com FILTRO) e confira que dão o mesmo número.
- Escreva, com LET, a margem bruta percentual da base inteira: receita total, custo total (Qtd × CustoUnit) e margem = (receita − custo) ÷ receita.
- Crie no Gerenciador de Nomes a função
TicketMedio = LAMBDA(r; n; r/n)e use-a para o ticket médio do vendedor Hugo Barros (receita ÷ número de vendas). - Monte a lista "Todas as regiões" + regiões em ordem alfabética com EMPILHARV, para um menu suspenso. Quantas opções o menu terá?
- Com PIVOTPOR, monte a receita por categoria (linhas) e região (colunas). Qual é a receita de Esporte no Sul?
- Na aba Consolidado, qual fórmula dá a Receita Líquida consolidada de 2028E? Qual é o valor?
- Na Analise_Consolidada, com C8 = 2028E, qual SBU tem o maior Caixa? Qual o Caixa consolidado?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 2 · Modelagem · Capítulo 1
Fundamentos e boas práticas de modelagem
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →No módulo de Tools você conheceu as peças do Excel: atalhos, referências, PROCX, SOMASES, matrizes dinâmicas, LET e LAMBDA. Volte à imagem do balde de Lego: até aqui você virou o balde e aprendeu o que cada peça faz. Agora é hora de montar. Na Modelagem, as peças viram construções inteiras (um simulador de quadro de funcionários, um modelo dos três demonstrativos, uma simulação de Monte Carlo), e cada construção passa a fazer parte do seu repertório. Quando surgir um projeto maior, você não começa do tijolo: começa de casas já prontas.
O módulo tem quatro sessões. Esta primeira trata dos fundamentos: o que é um modelo, como planejá-lo, como organizar o arquivo para que outra pessoa entenda e confie no resultado, e quais práticas modernas deixam o modelo mais legível e mais fácil de manter. Tudo isso é aplicado no case GAP, que você vai reconstruir do zero: um simulador que dimensiona o quadro de vendedores, apoios e operadores de caixa de 20 lojas e responde se vale a pena investir R$ 500 mil numa convenção de vendas.
- Explicar o que é um modelo, para que serve e quais são os tipos (estático, de cenários, de simulação e de otimização).
- Seguir o processo padrão de modelagem, do problema à análise de sensibilidade, e decompor uma pergunta de negócio em drivers.
- Distinguir problemas determinísticos de estocásticos.
- Organizar um modelo em camadas (premissas, dados, cálculo e resultado), com padrão de cores, documentação e versionamento.
- Usar Tabelas nomeadas, LET, LAMBDA e um seletor de cenário com PARÂMETRO.
- Construir checks automáticos e auditar fórmulas com as ferramentas do Excel.
- Resolver o case GAP completo: quadro por loja, folha anual e viabilidade da convenção de vendas.
1.1O que é um modelo
Um modelo é uma representação simplificada de um pedaço da realidade, feita para apoiar uma decisão. A frase do slide resume bem: modelo não é planilha grande; é uma máquina de responder uma pergunta que foi feita antes de abrir o Excel.
Dois exemplos fora do Excel ajudam a fixar a ideia. O aplicativo de mapas tem muito menos detalhe do que a rua: não mostra as fachadas, os buracos nem as árvores. Isso é proposital, porque o objetivo é chegar ao destino, e detalhe demais atrapalharia. A maquete de um prédio no shopping também é um modelo: preserva a escala e a aparência, mas deixa de fora a altura dos interruptores. Ela existe para apoiar uma decisão de outra pessoa, o visitante que passa pelo corredor e decide se deixa o contato com o corretor. Em ambos os casos, o que entra e o que fica de fora depende de qual decisão o modelo apoia e de quem vai usá-lo.
Daí saem as quatro ideias do slide:
- Todo modelo equaciona um pedaço da realidade para suportar uma decisão.
- Pergunta primeiro, planilha depois. A estrutura do modelo nasce da pergunta de negócio, não do layout que você costuma usar.
- Um bom modelo é auditável: outra pessoa entende o fluxo da informação sem precisar perguntar ao autor.
- Modelagem é disciplina, não talento. O processo importa mais que a genialidade de uma fórmula.
Representação simplificada de uma realidade, construída para apoiar uma decisão específica de um público específico. É sempre mais simples do que aquilo que representa; se fosse mais complicado, não ajudaria a entender nada.
Decompor a pergunta em drivers
A técnica central de quem modela é decompor. Ninguém estima o lucro de uma empresa chutando um número de lucro. Você quebra o lucro em receita menos custos; a receita em preço vezes volume; os custos em fixos e variáveis; e segue até chegar a variáveis que consegue estimar ou buscar numa fonte. Depois, faz o caminho de volta com fórmulas. Cada variável dessa árvore é um driver do resultado.
Pergunta do cliente: quanto a GAP vai gastar por ano com o quadro de funcionários das 20 lojas?
- Folha anual = quadro de cada cargo em cada loja × custo mensal do cargo × meses por ano.
- Quadro de um cargo numa loja = o maior número de pessoas que esse cargo precisa ao longo do dia (a regra do case: o quadro atende o pico).
- Pessoas necessárias numa hora = itens vendidos naquela hora ÷ produtividade do cargo (itens por hora), arredondado para cima.
- Itens vendidos numa hora = itens vendidos por dia × participação daquela hora na curva de vendas (que depende de a loja ser Pequena ou Grande).
- Itens vendidos por dia = venda média mensal ÷ preço médio ÷ dias úteis.
As folhas da árvore são dados (venda mensal de cada loja, na aba Projecao_Vendas) e premissas (preço médio, dias úteis, curvas, produtividade e custo por cargo, na aba Premissas). Todo o resto é cálculo. A árvore já antecipa a estrutura do arquivo: a seção 1.5 vai separar exatamente essas três famílias.
O nível de detalhe deve ser proporcional ao impacto. Pare de decompor quando o próximo nível não mudaria a resposta. No GAP, por exemplo, não faz sentido modelar a venda minuto a minuto: a hora cheia basta para dimensionar o quadro.
1.2Tipos de modelo
| Tipo | Quando usar |
|---|---|
| Estático | Uma resposta, premissas fixas (ex.: orçamento do ano) |
| De cenários | Poucas versões discretas e nomeadas (otimista, base, pessimista) |
| De simulação | Incerteza contínua nas entradas (Monte Carlo) |
| De otimização | Melhor escolha sob restrições (Solver) |
Tabela 1.1. Tipos de modelo. Os modelos de simulação e de otimização são tema dos Capítulos 3 e 4.
Os tipos costumam aparecer em sequência na vida de um modelo. O cálculo de quanto você precisa tirar na última prova para fechar a média é um modelo estático: uma resposta e pronto. Quando você passa a perguntar "e se eu for mal, médio ou bem na segunda prova?", ele vira um modelo de cenários. Cenários também servem para projetos: uma "chave" que liga ou desliga um projeto no modelo mostra o resultado com e sem ele. O modelo de simulação troca as três versões por milhares de sorteios das premissas incertas e conta em quantos deles o resultado cai em cada faixa. O de otimização procura a melhor combinação de decisões, como a rota mais curta para entregar 40 pacotes em endereços diferentes.
Top-down e bottom-up
Outra classificação útil é a direção da estimativa. No modelo top-down você parte do mercado e desce até a empresa. No bottom-up você parte da capacidade ou do histórico da própria operação e sobe. Fazer os dois é uma das melhores checagens que existem: se eles discordam muito, alguma premissa está errada.
Top-down: 200 milhões de habitantes × 50% que consomem cerveja × 60 litros por ano por consumidor = 6 bilhões de litros. A cervejaria só vai atuar numa região com 40% desse consumo (2,4 bilhões de litros) e mira 0,5% de participação: 12 milhões de litros por ano.
Bottom-up: 5 tanques × 2.000 litros por ciclo × 2 ciclos por semana × 50 semanas = 1.000.000 de litros; com 20% do tempo parado para limpeza, 800 mil litros por ano.
Top-down: 200.000.000 × 50% × 60 × 40% × 0,5% = 12.000.000 L
Bottom-up: 5 × 2.000 × 2 × 50 × (1 − 20%) = 800.000 L
A demanda estimada é 15 vezes a capacidade. Ou a meta de participação está otimista demais, ou a fábrica é pequena para o plano. Nenhum dos dois números, sozinho, mostraria o problema.
1.3O processo padrão de modelagem
O slide organiza o trabalho em seis etapas, que também são o esqueleto das quatro sessões do módulo.
- Problema. Qual decisão o modelo apoia, quem decide e quando.
- Dados. O que está disponível, de onde vem e com que confiança.
- Metodologia. Como transformar os dados na resposta.
- Resposta. Construir o modelo e calcular.
- Checagem. A resposta faz sentido? Quando uma premissa muda, o resultado se move na direção esperada?
- Sensibilidade. Quais premissas mais mexem no resultado?
Planejamento a fundo: da pergunta ao modelo
O passo mais barato e mais ignorado é o planejamento. Antes de qualquer célula, três perguntas definem o modelo:
| 1. Decompor a pergunta | 2. Breakdown das saídas | 3. Detalhe e fontes |
|---|---|---|
| Qual decisão o modelo apoia? | Quebre a saída principal em drivers | Só os dados que mudam a decisão |
| Quais opções estão na mesa? | Lucro = receita − custos | Uma fonte para cada premissa |
| Quais hipóteses precisam valer? | Receita = preço × volume | Detalhe proporcional ao impacto |
| Ex.: comprar o concorrente? Por quanto? Construir ou adquirir? | Pare no nível que move a resposta | Mapeie dependências antes de construir |
Tabela 1.2. As três perguntas do planejamento.
Checagem, teste de estresse e sensibilidade
A checagem começa pelo bom senso: o modelo responde como a realidade responderia? Em aula, o professor distingue dois testes que usam a mesma mecânica de alterar premissas:
- Teste de estresse: levar uma premissa a valores extremos e ver se o modelo continua coerente.
- Análise de sensibilidade: variar uma premissa em pequenos passos e medir quanto o resultado anda. Feita em várias premissas, mostra a qual delas o modelo é mais sensível.
Uma empresa fatura US$ 1 milhão por mês e tem custo de R$ 3,5 milhões por mês. Com o dólar a R$ 5,10, o lucro é R$ 1,6 milhão.
Lucro = Receita em US$ × Câmbio − Custo em R$
= 1.000.000 × 5,10 − 3.500.000 = 1.600.000
Estresse: com o dólar a R$ 4,00, o lucro cai para R$ 500 mil; a R$ 7,00, sobe para R$ 3,5 milhões. Como só a receita está em dólar, o lucro precisa subir quando o câmbio sobe. Se o modelo mostrasse o contrário, haveria um erro de ligação.
Sensibilidade: de 5,10 para 5,20, 5,30 e 5,40, o lucro vai a 1,7, 1,8 e 1,9 milhão. Cada R$ 0,10 no câmbio (2% de variação) move o lucro em R$ 100 mil (6,25%). O lucro é mais de três vezes mais sensível que o câmbio, porque a margem é estreita.
Descobrir que o modelo é muito sensível a uma premissa não é um problema em si. O problema é ser muito sensível a uma premissa em que você tem pouca confiança. Nesse caso há dois caminhos: decompor a premissa em partes mais confiáveis ou chegar ao número por outro caminho, por exemplo trocando uma estimativa top-down por uma bottom-up baseada no histórico.
1.4Determinístico × estocástico
A pergunta que separa os dois mundos é: a mesma entrada dá sempre a mesma saída?
| Determinístico | Estocástico |
|---|---|
| Fechamento contábil do mês | Demanda futura de um produto |
| Cálculo de folha de pagamento | Tempo até a próxima falha de máquina |
| Preço com desconto por regra fixa | Retorno de uma carteira de ações |
| Modelo estático basta | Modelo de cenário ou de simulação |
Tabela 1.3. Problemas determinísticos e estocásticos.
A folha de pagamento tem uma resposta certa: horas trabalhadas, valor da hora, horas extras, faltas, férias. Por mais itens que a conta tenha, ou o número está certo ou está errado. Já a chuva de amanhã não tem resposta certa: o aplicativo informa "50% de chance de 20 mm". Quanto mais perto do evento, melhor a previsão, porque parte da incerteza já foi eliminada.
A maior parte do que se faz no Excel é determinística. O case GAP é um bom exemplo de fronteira: dado o orçamento de vendas, o quadro é uma conta exata; mas o orçamento em si é uma estimativa. O case trata a venda como dada e por isso o modelo é determinístico.
Faça a mesma pergunta duas vezes a um assistente de IA e você pode receber duas respostas diferentes: o processo por trás é probabilístico. Por isso o professor usa IA para construir o modelo (escrever e revisar fórmulas, montar a estrutura, documentar), e não para processar os números de um problema determinístico como a folha. A última aula do curso volta a esse critério.
1.5Layout: premissas, cálculo e resultado
A regra mais importante de organização é separar onde se insere informação de onde se calcula. O slide propõe cinco camadas:
| Camada | Função |
|---|---|
| Premissas globais | Taxas, datas, parâmetros do cenário inteiro |
| Premissas individuais | Inputs específicos de cada linha ou produto |
| Dados | Base bruta, idealmente em Tabela |
| Cálculo | Onde as fórmulas trabalham; nunca um hard number aqui |
| Resultados / Resumo | O que o leitor do modelo realmente quer ver |
Tabela 1.4. Camadas do layout padrão.
Nem todo modelo precisa das cinco. Separar premissas e dados do cálculo vale sempre: facilita a organização, a manutenção e a auditoria. Até onde ir na camada de resultado depende do usuário. Um modelo para uso próprio pode terminar na aba de cálculo; um modelo para a diretoria pede uma aba de resultados e, muitas vezes, uma capa de resumo, que responde em segundos à primeira pergunta de quem abre o arquivo: "tem algum problema aqui que eu preciso investigar?".
Pense o modelo como três momentos: o dado cru (muitas vezes alimentado por Power Query, tema do módulo de Automatização), o dado trabalhado (o cálculo) e a visualização (resultado e capa). Em um controle de contas a receber, por exemplo, o dado cru tem uma linha por fatura; o resultado mostra o saldo por cliente; a capa mostra o total em aberto, o total por gerente de contas e o total por faixa de atraso.
Pivotado para ler, tabelado para calcular
Na aula, ao tentar transformar a curva de vendas da aba Premissas em Tabela, apareceu uma lição de estrutura. A curva está pivotada: uma linha por tipo de loja e uma coluna por hora. Esse formato é ótimo para uma pessoa ler, mas ruim para fórmulas, porque cada hora nova vira uma coluna nova. O formato tabelado tem uma linha por combinação (tipo × hora) e uma coluna por variável. É o que o computador lê bem: vira Tabela, filtra, soma com SOMASES e cresce para baixo.
Reestruturar a curva para o formato tabelado só compensa se ela for mudar: novos tipos de loja (quiosque, megaloja) ou novos horários. No GAP, com dois tipos e horário fixo, o próprio professor chamou essa engenharia de exagero: uma busca direta na curva pivotada resolve com uma fórmula só (seção 1.10). Construa a flexibilidade que o problema pede, não toda a flexibilidade possível.
1.6O que fazer e o que não fazer
| Fazer | Não fazer |
|---|---|
| Isolar toda premissa numa célula nomeada | Hard number escondido dentro de uma fórmula |
| Codificar cores (ex.: azul = input, preto = fórmula) | Premissa repetida em várias células (uma fonte da verdade) |
| Documentar o padrão de cores no próprio arquivo | Cor sem legenda em nenhum lugar |
| Versionar (nome do arquivo ou aba de log) | Cálculo e input misturados na mesma célula |
| Construir um check automático desde o início | Enviar o modelo sem um check de consistência |
Tabela 1.5. Boas e más práticas de construção.
Nada de hard number
Hard number é um número digitado dentro de uma fórmula. É o erro mais comum e o mais caro de manter.
Um funcionário trabalha 8 horas por dia, 22 dias por mês, e ganha R$ 100 por hora.
Errado: =176*100 → 17.600
Certo: C3: 8 (horas por dia)
C4: 22 (dias úteis por mês)
C5: 100 (R$ por hora)
C7: =C3*C4*C5 → 17.600
Os dois dão R$ 17.600 hoje. Amanhã, ninguém lembra o que é o 176. E se o valor da hora subir para R$ 110, na versão certa basta alterar C5 (o resultado vai a R$ 19.360); na errada, é preciso caçar cada "100" do arquivo e decidir se ele é o valor da hora ou outra coisa que também valia 100.
Vale explicitar até as premissas que parecem óbvias. O case GAP traz meses por ano = 12 na aba Premissas. Assim, toda fórmula que multiplica por essa célula diz, sozinha, que está anualizando um valor mensal.
Para premissas, o professor recomenda quatro colunas. O Excel tem mais de 16 mil colunas; usar quatro em vez de uma não custa nada e deixa o modelo legível.
| Premissa | Valor | Unidade | Fonte |
|---|---|---|---|
| Preço médio | 200 | R$ por item | Área Comercial (orçamento) |
| Dias úteis por mês | 22 | dias | Calendário de operação |
| Produtividade do vendedor | 15 | itens por hora | RH |
| Custo mensal do vendedor | 5.000 | R$ por mês | RH (folha + encargos) |
Tabela 1.6. Premissas documentadas (valores da aba Premissas do GAP; as fontes são ilustrativas).
Padrão de cores
O padrão que o curso usa: fundo cinza com fonte azul para input (onde o usuário pode digitar) e fundo branco com fonte preta para cálculo (onde deve haver uma fórmula). Só isso já entrega a maior parte do valor. Quem quiser ir além marca também o histórico (números digitados que não devem mudar) com uma terceira cor. As abas também ganham cor: cinza para entrada e etapas intermediárias; cores vivas para o que o usuário lê.
- Legenda de cores na capa ou na aba de instruções. Cor sem legenda não comunica nada.
- Aba de instruções: o passo a passo para usar o modelo (que botão apertar, em que ordem atualizar). Serve até para o próprio autor, seis meses depois.
- Aba de metodologia: como o modelo funciona, para quem for herdá-lo.
- Versionamento: salve versões com data no nome ou registre as mudanças numa aba de log. Faça um backup antes de mudanças grandes, especialmente antes de rodar uma macro (VBA não tem Ctrl+Z). Guardar o arquivo na nuvem também protege contra a perda do computador.
Quando o professor usa um assistente de IA para alterar uma planilha, a primeira instrução do dia é criar um backup do arquivo. Se algo der errado, basta voltar à versão anterior.
1.7Práticas modernas de construção
O que mudou nos últimos anos não foi a lógica dos modelos, mas as ferramentas para escrevê-los.
| Prática antiga | Prática moderna |
|---|---|
| Dados soltos, referência por endereço | Tabela nomeada (tbl_) com referência estruturada |
| Fórmula longa repetida célula a célula | LET nomeando cada etapa do cálculo |
| Função recorrente copiada e colada | LAMBDA nomeada: documentação viva |
| Cenário via INDIRETO ou Gerenciador de Cenários | Seletor com PARÂMETRO (ou PROCX) + validação de dados |
Tabela 1.7. Práticas antigas e modernas.
Tabelas nomeadas
Uma Tabela (Ctrl+T ou Inserir › Tabela) cresce sozinha quando entram linhas novas, e as fórmulas que apontam para ela acompanham. Dê sempre um nome com prefixo: em Design da Tabela › Nome da Tabela ou em Fórmulas › Gerenciador de Nomes. Com o prefixo tbl_, basta digitar tbl numa fórmula para ver todas as Tabelas do arquivo.
- Selecione B6:R26 (cabeçalho e as 20 lojas, sem a linha de totais).
- Ctrl+T, marque Minha tabela tem cabeçalhos e confirme. A coluna C, vazia e sem título, recebe um nome automático (Coluna1); toda coluna de Tabela precisa de cabeçalho.
- Renomeie a Tabela para
tbl_Vendas.
As referências passam a ser legíveis:
=tbl_Vendas[Loja] → as 20 lojas (sem o cabeçalho)
=tbl_Vendas[[#Tudo];[Loja]] → idem, com o cabeçalho
=tbl_Vendas[#Cabeçalhos] → só a linha de títulos
=PROCX("Loja 15";tbl_Vendas[Loja];tbl_Vendas[Média Mensal]) → 1.502.803,08
Compare com =PROCV(E4;Projecao_Vendas!$B$6:$E$26;4;0): o 4 é um hard number que quebra se alguém inserir uma coluna.
LET: nomear as etapas
O LET, visto no Tools, recebe pares nome; valor e termina com o cálculo final, que pode usar todos os nomes. Os ganhos são três: a fórmula se explica sozinha, cada etapa é calculada uma vez só (mais rápido) e, quando o resultado é uma matriz despejada, tudo fica coeso numa única célula.
Sem LET:
=PROCX(Loja;tbl_Vendas[Loja];tbl_Vendas[Média Mensal])/Premissas!C15/Premissas!C23
Com LET:
=LET(venda; PROCX(Loja;tbl_Vendas[Loja];tbl_Vendas[Média Mensal]);
preco; Premissas!C15;
dias; Premissas!C23;
venda/preco/dias)
Com a Loja 15: 1.502.803,08 ÷ 200 ÷ 22 = 341,55 itens por dia. A segunda versão lê como um roteiro: pegue a venda da loja, divida pelo preço e pelos dias. Nomes como a, b e c funcionariam igual, mas não ajudariam ninguém a auditar a fórmula na semana seguinte.
LAMBDA: a regra de negócio vira função
Se o LET nomeia variáveis, o LAMBDA nomeia uma fórmula inteira. Em Fórmulas › Gerenciador de Nomes › Novo, você dá um nome e escreve, em "Refere-se a", os parâmetros e o cálculo. A função passa a aparecer no autocompletar, como qualquer função do Excel, sem VBA.
No Gerenciador de Nomes, crie POSICOES com:
=LAMBDA(itens; produtividade; ARREDONDAR.PARA.CIMA(itens/produtividade;0))
Teste com o exemplo do próprio case (30 itens numa hora):
=POSICOES(30;15) → 2 vendedores
=POSICOES(30;6) → 5 apoios
=POSICOES(30;8) → 4 operadores (30 ÷ 8 = 3,75, arredondado para cima)
Se a regra mudar (por exemplo, aceitar até 5% de venda perdida), ela muda num lugar só, e todas as fórmulas que usam POSICOES acompanham. É isso que o slide chama de documentação viva.
Seletor de cenário moderno
O seletor de cenário tem duas peças: uma célula com validação de dados em lista (Pessimista, Base, Otimista) e uma fórmula que traduz a escolha num número. A forma recomendada no slide é PARÂMETRO (SWITCH):
=PARÂMETRO(cenário; "Otimista"; 1,15; "Base"; 1; "Pessimista"; 0,85)
O primeiro argumento é a expressão avaliada; depois vêm pares valor procurado; resultado. Um último argumento sem par funciona como resultado padrão. Isso substitui o antigo Gerenciador de Cenários (um menu escondido que poucos encontram) e elimina o INDIRETO dos modelos antigos, que é volátil (recalcula a cada alteração em qualquer célula).
Na análise da convenção do GAP, o ganho de produtividade prometido vai de 10% a 20%. Com a escolha do cenário em K7:
=PARÂMETRO(K7;"Pessimista";10%;"Base";15%;"Otimista";20%)
=ESCOLHER(CORRESP(K7;{"Pessimista";"Base";"Otimista"};0);10%;15%;20%)
=PROCX(K7;N4:N6;O4:O6) (cenários em N4:N6, ganhos em O4:O6)
As três devolvem 15% para "Base". ESCOLHER (CHOOSE) com CORRESP (MATCH) era o caminho clássico. PARÂMETRO é o mais legível para poucos cenários. O professor prefere PROCX quando a lista de cenários fica numa tabela de premissas, porque acrescentar um cenário vira acrescentar uma linha, sem tocar na fórmula.
Fórmulas que derramam (matrizes dinâmicas) precisam de espaço vazio. Qualquer conteúdo no caminho gera #DESPEJAR!. Ao desenhar o layout, reserve área para cada despejo e evite intercalar fórmulas ao lado de um intervalo que pode crescer. No GAP, a fórmula de posições por hora ocupa F33:S35; se um dia a loja abrir às 23h, ela vai precisar da coluna T livre.
1.8Checks automáticos e auditoria
Um modelo correto se prova sozinho, não porque o autor jura que está certo. Um check é uma célula dedicada que calcula a mesma coisa por dois caminhos e mostra a diferença, separada do resultado principal.
- Soma cruzada: total por linha = total por coluna. No GAP, a folha somada por loja tem de bater com a folha somada por cargo.
- Totais conhecidos: a curva de vendas de cada tipo de loja soma 100%; não pode distribuir 90% nem 120% das vendas do dia.
- Continuidade e sinais: datas sem buracos, custos sempre negativos (ou sempre positivos), estoques nunca negativos.
- Caminhos diferentes: top-down contra bottom-up; valuation por fluxo de caixa descontado contra múltiplos. No modelo dos três demonstrativos (Capítulo 2), o check por excelência é o Balanço fechar: Ativo = Passivo + Patrimônio Líquido.
A aba Premissas já soma cada curva em Q4 e Q5 (=SOMA(D4:P4) e =SOMA(D5:P5)), ambas iguais a 100%. Ao lado, escreva:
R4: =Q4-1 → 0
e copie para R5. Depois, em Página Inicial › Formatação Condicional › Nova Regra › Usar uma fórmula, aplique a R4:R5 a regra =ABS(R4)>0,0001 com fundo vermelho, e outra com =ABS(R4)<=0,0001 com fundo verde. Se alguém alterar um percentual da curva e esquecer de compensar em outra hora, a célula fica vermelha na hora.
É tentador escrever o check como =Q4=1, que devolve VERDADEIRO ou FALSO. O professor prefere a subtração: contas com casas decimais acumulam diferenças minúsculas de arredondamento binário (algo como 0,0000000001), e o teste de igualdade pode dar FALSO para valores que, na prática, batem. A diferença mostra o tamanho do desvio e, com uma tolerância (ABS(diferença)<0,0001), separa erro de verdade de ruído numérico.
Ferramentas de auditoria
Quando você herda um modelo, as ferramentas clássicas ajudam a rastrear de onde vem cada número. Quando você constrói, o ideal é que elas quase não sejam necessárias: LET nomeia as etapas, as referências estruturadas dizem que dado está sendo usado e as premissas isoladas garantem uma fonte da verdade por número.
| Ferramenta | Onde / atalho | Para que serve |
|---|---|---|
| Rastrear Precedentes (Trace Precedents) | Fórmulas › Auditoria de Fórmulas | Setas para as células que a fórmula usa |
| Rastrear Dependentes (Trace Dependents) | Fórmulas › Auditoria de Fórmulas | Setas para as células que usam esta |
| Remover Setas | Fórmulas › Auditoria de Fórmulas | Limpa as setas |
| Selecionar precedentes / dependentes | Ctrl+[ / Ctrl+] | Seleciona as células, sem setas; duplo clique na célula leva aos precedentes |
| Acender referências | F2 e depois Esc | Colore as células usadas e sai sem alterar nada |
| Calcular um trecho | Selecione o trecho na Barra de Fórmulas e tecle F9 | Mostra o valor daquele pedaço da fórmula |
| Avaliar Fórmula (Evaluate Formula) | Fórmulas › Auditoria de Fórmulas | Executa a fórmula passo a passo |
| Janela de Inspeção (Watch Window) | Fórmulas › Auditoria de Fórmulas | Vigia células distantes enquanto você altera premissas |
Tabela 1.8. Ferramentas de auditoria. O duplo clique leva aos precedentes só com a edição na célula desligada (Arquivo › Opções › Avançado), como recomendado no Capítulo 1 do Tools.
Depois de calcular um trecho com F9, saia da célula com Esc. Se você teclar Enter, o Excel grava o valor calculado no lugar daquele trecho, e a fórmula deixa de responder às premissas, criando exatamente o hard number que se queria evitar.
1.9Case GAP: antes e depois
O case GAP é um clássico do curso. A versão legada resolvia o orçamento de vendas por loja com técnicas que hoje têm substitutas melhores. A versão 2026 é o mesmo case com técnica moderna, e é ela que você vai construir.
| Versão legada | Versão 2026 |
|---|---|
| PROCV encadeado, várias camadas de busca | PROCX direto, sem encadeamento |
| Fórmulas CSE (Ctrl+Shift+Enter) para faixas | Tabela nomeada + LET para o cálculo por loja |
| 2 Tabelas de Dados sem formatação condicional | Seletor de cenário por PARÂMETRO + validação |
| Cenário trocado manualmente, célula a célula | Check automático valida o total batido |
Tabela 1.9. O case GAP antes e depois.
1.10Exercícios resolvidos
Exercício 1: reconstruir o GAP
Arquivo: EBP_Mod_GAP@2026.xlsx. As abas visíveis são EBP (capa), Calculos (vazia, para construir), Premissas_>>> (separador), Projecao_Vendas (orçamento de vendas por loja), Premissas (curvas, produtividade, preço, custos e períodos) e Calculos_Modelo (a estrutura do simulador, com valores digitados).
Tarefa do slide: usando as premissas fornecidas, construir o seletor, o cálculo por loja com LET e um check automático. Tarefa do case: desenvolver o simulador do zero, dividido em premissas, área de cálculo e área de consolidação, chegar ao quadro e ao custo total por cargo e por loja e, com o mesmo modelo, analisar a convenção de vendas.
A aba Calculos_Modelo mostra o esqueleto do simulador com números digitados. A forma mais prática, usada em aula, é transformar esse esqueleto num modelo vivo, trocando cada número por uma fórmula (ou copiar a estrutura para a aba Calculos e trabalhar lá). As telas a seguir usam a Calculos_Modelo. A resolução segue as quatro etapas propostas pelo professor.
A Calculos_Modelo traz a Loja 15 com venda média de 1.500.000. O valor real da Projecao_Vendas é 1.502.803,08, e por isso os itens por dia passam de 340,91 para 341,55 quando a fórmula entra. O quadro da Loja 15 não muda (3 vendedores, 6 apoios, 4 operadores), e a consolidação digitada nas colunas U:AA bate com o modelo vivo: use-a para conferir o seu resultado.
Etapa 1: premissas ligadas e itens por dia
- Tabela e lista de lojas. Crie a
tbl_Vendas(Exemplo 1.5). A validação de dados não aceita referência estruturada direto na fonte; por isso, numa área auxiliar (uma aba Listas, por exemplo), escreva=tbl_Vendas[Loja]em B5 e dê ao despejo o nomeLST_Lojas(Gerenciador de Nomes, Refere-se a=Listas!$B$5#). O prefixoLST_agrupa as listas no autocompletar. - Seletor da loja. Em E4, Dados › Validação de Dados › Lista, fonte
=LST_Lojas. Dê à célula E4 o nomeLoja(digite na Caixa de Nome e tecle Enter): as fórmulas ficam mais legíveis e a referência já nasce absoluta. - Tipo e venda. Duas buscas na Tabela:
E5: =PROCX(Loja;tbl_Vendas[Loja];tbl_Vendas[Tipo];"";0) → Grande
E20: =PROCX(Loja;tbl_Vendas[Loja];tbl_Vendas[Média Mensal];"";0) → 1.502.803,08
- Premissas. Cada bloco vem da aba Premissas com uma fórmula que derrama:
E8: =Premissas!$C$10:$C$12 → 15; 6; 8 (derrama em E8:E10)
E14: =Premissas!$C$18:$C$20 → 5.000; 3.500; 2.000
E19: =Premissas!C15 → 200
E21: =Premissas!$C$23:$C$24 → 22; 12
Apague antes os números digitados que estão no caminho; senão, o resultado é #DESPEJAR!.
- Itens vendidos por dia.
E23: =(E20/E19)/E21 → 341,55
A venda em reais dividida pelo preço médio dá os itens vendidos no mês; dividida pelos dias úteis, os itens por dia. O case assume que a loja só abre em dias úteis.
Etapa 2: itens por hora e posições necessárias
Itens por hora. A curva depende do tipo da loja. O caminho errado é um SE ("se Grande, curva do Grande; senão, curva do Pequeno"): com 200 tipos, seriam 200 SEs. O caminho certo é uma busca que devolve a linha inteira da curva:
B30: =Loja
E30: =E5
F30: =PROCX($E$30;Premissas!$B$4:$B$5;Premissas!$D$4:$P$5;"";0)*$E$23
O PROCX procura "Grande" em B4:B5 e devolve D5:P5, as 13 horas de uma vez; multiplicado pelos itens por dia, derrama em F30:R30. Para uma loja Pequena, as duas últimas horas (21h e 22h) ficam zeradas, porque a loja de rua fecha mais cedo.
Posições por hora. Divida os itens de cada hora pela produtividade de cada cargo e arredonde para cima, porque a premissa é nunca perder venda. Às 15h, a Loja 15 vende 30,74 itens; dois vendedores atendem 30. A GAP prefere um terceiro vendedor parcialmente ocioso a perder uma venda (e a imagem de uma marca premium com cliente esperando). O quadro de cada cargo é o máximo do dia.
A versão célula a célula seria =ARREDONDAR.PARA.CIMA(F$30/$E8;0) copiada em F33:R35, com =MÁXIMO(F33:R33) em S33:S35. A versão moderna, uma única fórmula em F33:
F33: =LET(posicao; ARREDONDAR.PARA.CIMA(F30#/E8#;0);
EMPILHARH(posicao; BYROW(posicao; MÁXIMO)))
F30#/E8#divide uma linha (13 horas) por uma coluna (3 cargos) e gera a grade 3 × 13.BYROW(posicao; MÁXIMO)aplica MÁXIMO linha a linha (um MÁXIMO comum devolveria o maior valor da grade inteira). Se a sua versão do Excel não aceitar o nome da função direto, escrevaBYROW(posicao; LAMBDA(linha; MÁXIMO(linha))).EMPILHARH(HSTACK) junta a grade e a coluna de máximos, que vai parar em S33:S35.
O ganho não é só estético. Se a loja Grande passar a abrir às 23h e a curva ganhar uma coluna, a grade cresce e a coluna de máximos anda junto, sem quebrar nada. MAIOR (LARGE) também serviria no lugar de MÁXIMO, com a vantagem de pedir o segundo ou o terceiro maior valor, se um dia isso for útil.
Etapa 3: consolidar as 20 lojas e calcular a folha
O modelo calcula uma loja por vez, a escolhida em E4. Para ver as 20 de uma vez, o professor usa a Tabela de Dados (Data Table), recurso que o Capítulo 3 aprofunda. A ideia: o Excel coloca cada loja da coluna U em E4, recalcula o modelo e anota o resultado ao lado.
- Linha de referência. Em V6, traga o quadro da loja selecionada, já na horizontal:
V6: =TRANSPOR(PEGAR(F33#;;-1)) → 3 6 4
PEGAR (TAKE) com −1 colunas pega a última coluna do despejo, a dos máximos, qualquer que seja o número de horas. Um =TRANSPOR(S33:S35) funcionaria hoje, mas quebraria se a grade crescesse.
- Monte a tabela. As lojas ficam em U7:U26 (ou
=tbl_Vendas[Loja], se quiser a lista viva). Selecione U6:X26, incluindo a linha de referência. - Dados › Teste de Hipóteses › Tabela de Dados. Deixe "Célula de entrada da linha" vazia e, em Célula de entrada da coluna, aponte E4, porque as lojas estão numa coluna e é em E4 que cada uma deve entrar. A célula de entrada precisa estar na mesma aba da tabela.
- Custos. O custo mensal de cada loja é a soma de quantidade × custo dos três cargos. A dificuldade é que as quantidades estão em linha (V:X) e os custos em coluna (E14:E16). Há dois caminhos:
Z7: =SOMARPRODUTO(V7:X7;TRANSPOR($E$14:$E$16)) → 10.500 (copiar até Z26)
Z7: =MATRIZ.MULT(V7:X26;E14#) → derrama as 20 lojas
AA7: =Z7#*$E$22 → custo anual
MATRIZ.MULT (MMULT) multiplica uma matriz 20 × 3 por uma 3 × 1 e devolve 20 × 1. Na multiplicação de matrizes a ordem importa: MATRIZ.MULT(E14#;V7:X26) dá erro. Quem não se sente à vontade com matrizes pode ficar com SOMARPRODUTO e TRANSPOR, que chegam ao mesmo número.
- Totais por cargo e check.
V28: =SOMA(V7:V26) → 40 (copiar para W28:X28)
V30: =V28:X28*TRANSPOR(E14#) → 200.000; 294.000; 130.000
V31: =V30#*$E$22 → 2.400.000; 3.528.000; 1.560.000
Z30: =SOMA(Z7#) → 624.000
AA31: =SOMA(AA7#) → 7.488.000
AA33: =AA31-SOMA(V31#) → 0 (check: por loja − por cargo)
| Loja | Tipo | Vendedor | Apoio | Operador | Custo mensal (R$) | Custo anual (R$) |
|---|---|---|---|---|---|---|
| Loja 1 a Loja 2 | Pequeno | 1 | 1 | 1 | 10.500 | 126.000 |
| Loja 3 | Pequeno | 1 | 2 | 1 | 14.000 | 168.000 |
| Loja 4 a Loja 5 | Pequeno | 1 | 2 | 2 | 16.000 | 192.000 |
| Loja 6 | Pequeno | 1 | 3 | 2 | 19.500 | 234.000 |
| Loja 7 | Pequeno | 2 | 3 | 2 | 24.500 | 294.000 |
| Loja 8 a Loja 9 | Pequeno | 2 | 4 | 3 | 30.000 | 360.000 |
| Loja 10 a Loja 11 | Grande | 2 | 4 | 3 | 30.000 | 360.000 |
| Loja 12 a Loja 14 | Grande | 2 | 5 | 4 | 35.500 | 426.000 |
| Loja 15 | Grande | 3 | 6 | 4 | 44.000 | 528.000 |
| Loja 16 a Loja 17 | Grande | 3 | 6 | 5 | 46.000 | 552.000 |
| Loja 18 a Loja 19 | Grande | 3 | 7 | 5 | 49.500 | 594.000 |
| Loja 20 | Grande | 3 | 7 | 6 | 51.500 | 618.000 |
| Total (20 lojas) | 40 | 84 | 65 | 624.000 | 7.488.000 |
Tabela 1.10. Resultado da primeira requisição: quadro e custo por loja (valores por loja; lojas com o mesmo quadro agrupadas). A folha anual é de R$ 7.488.000: R$ 2,4 milhões em vendedores, R$ 3,53 milhões em apoios e R$ 1,56 milhão em operadores.
Cada Tabela de Dados recalcula o modelo inteiro uma vez por linha. Em modelos grandes, isso deixa tudo lento. Em Fórmulas › Opções de Cálculo › Automático, exceto tabelas de dados, o Excel só recalcula as tabelas quando você tecla F9. Se usar essa opção, lembre de recalcular antes de ler os resultados.
Etapa 4: vale a pena fazer a convenção?
A segunda requisição: a convenção custa R$ 500 mil; RH e Comercial acreditam que a produtividade suba entre 10% e 20% no ano; a GAP não aprova projetos com retorno abaixo de 12% ao ano (a taxa mínima de atratividade, TMA). O caminho do modelo: mais produtividade → menos gente no pico → folha menor. A economia de folha paga o investimento?
Monte o bloco numa área livre da aba (I4:K20), com as entradas em azul:
K6: 500000 Investimento
K8: 10% Ganho de produtividade
K10: 12% TMA
K12: 7488000 Folha sem projeto (valor colado)
K13: =AA31 Folha com projeto (ligada ao modelo)
K15: =K12-K13 Economia de folha
K17: =K15-K6 Ganho líquido
K18: =K17/K6 ROI
K20: =SE(K18>=K10;"Investir";"Não investir")
Dois detalhes fazem o bloco funcionar:
- A folha sem projeto é colada como valor (Ctrl+Alt+V › Valores) enquanto o ganho ainda é 0%. Ela é a fotografia do cenário atual; a folha com projeto continua ligada ao modelo e reage ao ganho.
- O ganho entra nas premissas do modelo. Em E8:
=Premissas!$C$10:$C$12*(1+K8). Com 10%, a produtividade vai a 16,5, 6,6 e 8,8 itens por hora, e a Tabela de Dados recalcula as 20 lojas sozinha.
Qual ganho usar? A promessa é "de 10% a 20%". Um analista conservador usa o piso: se o projeto se paga quando a área entrega o mínimo prometido, ele pode ser aprovado.
Com 10% de ganho, a Loja 15 passa de 3 para 2 vendedores e de 6 para 5 apoios, e o quadro total cai de 189 para 176 pessoas (37 vendedores, 78 apoios e 61 operadores). A economia de R$ 528 mil mal cobre o investimento: o ganho líquido é R$ 28 mil, um retorno de 5,6%. Decisão: não investir nas condições propostas. A formatação condicional na célula de decisão (texto que contém "Não" em vermelho; caso contrário, verde) deixa a resposta visível na hora.
O case fala em ganho de produtividade "no ano", e a análise da aula compara a economia de um ano com o investimento feito hoje: ROI = (economia − investimento) ÷ investimento. Essa conta ignora que os R$ 528 mil chegam ao longo do ano. Trazendo a economia a valor presente pela TMA, a conclusão é a mesma: −500.000 + 528.000 ÷ 1,12 = −28.571,43, um valor presente líquido negativo. Repare que 528.000 ÷ 1,12 = 471.428,57 é exatamente o investimento máximo que a GAP poderia aprovar. Se o ganho de produtividade se mantivesse por vários anos, a análise mudaria de figura e pediria um fluxo de caixa completo, com VPL e TIR (XVPL e XTIR), tema do Capítulo 2.
Sensibilidade ao investimento. A TMA não está nas mãos do comercial; o ganho de produtividade também não é garantido. O valor investido, sim: uma convenção num destino mais barato poderia entregar os mesmos 10% gastando menos. Uma segunda Tabela de Dados mostra o ROI para vários investimentos:
P5: 500000 P6: -10000 P7: 16 (base, passo e quantidade)
P10: =SEQUÊNCIA(P7;1;P5;P6) → 500.000 até 350.000
Q9: =K18 → linha de referência (ROI)
Selecione P9:Q25 › Tabela de Dados › célula de entrada da coluna: K6
Como a lista de investimentos é uma SEQUÊNCIA, mudar a base ou o passo refaz a tabela inteira. Uma formatação condicional por fórmula pinta a linha toda: aplique a P10:Q25 a regra =$Q10>=$K$10 em verde e =$Q10<$K$10 em vermelho. O $ antes do Q trava a coluna do ROI, e a cor vale para as duas colunas.
A recomendação ao cliente muda de "não" para "sim, com condições": a convenção se paga se custar no máximo R$ 471.428,57. Na prática, o professor sugere liberar algo como R$ 400 a 420 mil, que deixa folga caso o custo estoure em 10% e ainda mantém o retorno acima da TMA (ROI de 32,0% a 400 mil; de 25,7% a 420 mil).
Seletor de cenário. Por fim, troque o ganho digitado em K8 pelo seletor do Exemplo 1.8. Em K7, uma validação de dados com Pessimista, Base e Otimista; em K8:
K8: =PARÂMETRO(K7;"Pessimista";10%;"Base";15%;"Otimista";20%)
| Cenário | Ganho | Quadro (V / A / O) | Folha anual (R$) | Economia (R$) | Ganho líquido (R$) | ROI | Decisão |
|---|---|---|---|---|---|---|---|
| Sem projeto | 0% | 40 / 84 / 65 | 7.488.000 | ||||
| Pessimista | 10% | 37 / 78 / 61 | 6.960.000 | 528.000 | 28.000 | 5,6% | Não investir |
| Base | 15% | 37 / 72 / 58 | 6.636.000 | 852.000 | 352.000 | 70,4% | Investir |
| Otimista | 20% | 36 / 70 / 56 | 6.444.000 | 1.044.000 | 544.000 | 108,8% | Investir |
Tabela 1.11. A convenção nos três cenários, com investimento de R$ 500 mil e TMA de 12%.
Na aula, uma Tabela de Dados com ganhos de 10%, 12,5%, 15%... pareceu "travar": vários ganhos davam o mesmo resultado, e a suspeita recaiu sobre a Tabela de Dados com percentuais pequenos. A tabela estava certa. Por causa do arredondamento para cima, o quadro só muda quando algum cargo, em alguma loja, cruza um número inteiro no pico. Entre 11% e 13% de ganho a folha é a mesma (R$ 6.894.000, ROI de 18,8%); entre 14% e 15%, também (R$ 6.636.000). Com R$ 500 mil investidos, o ROI só passa de 12% a partir de um ganho de aproximadamente 10,92%. Antes de culpar a ferramenta, pergunte se o modelo é contínuo.
Desafio extra: um segundo seletor (trimestre)
O slide propõe um segundo seletor independente, por exemplo o trimestre, combinado ao primeiro. Crie uma célula Periodo com validação em lista (Ano, 1T, 2T, 3T, 4T) e troque a fórmula da venda em E20 por:
E20: =LET(linha; FILTRO(tbl_Vendas[[Janeiro]:[Dezembro]]; tbl_Vendas[Loja]=Loja);
ini; PARÂMETRO(Periodo; "1T";1; "2T";4; "3T";7; "4T";10; 0);
SE(ini=0; MÉDIA(linha); MÉDIA(ESCOLHERCOLS(linha; SEQUÊNCIA(1;3;ini)))))
O PARÂMETRO traduz o trimestre no mês inicial (o 0 final é o padrão para "Ano"); ESCOLHERCOLS (CHOOSECOLS) pega os três meses do trimestre, e a média deles é a venda mensal daquele período. Os dois seletores convivem: o de produtividade age em E8, o de período em E20, e a Tabela de Dados recalcula as 20 lojas para qualquer combinação.
Para a Loja 15, a venda mensal vai de 1.500.173 (2T) a 1.504.870 (1T), e os itens por dia de 340,95 a 342,02. Em nenhum trimestre o quadro de nenhuma loja muda: a folha continua em R$ 7.488.000. A conclusão também é informação: o orçamento da GAP quase não tem sazonalidade, e dimensionar pela média do ano é seguro.
- Modelo é uma simplificação da realidade feita para apoiar uma decisão de alguém. Pergunta primeiro, planilha depois.
- Decompor a pergunta em drivers revela quais dados e premissas o modelo precisa e já desenha a sua estrutura.
- Os tipos de modelo (estático, de cenários, de simulação, de otimização) costumam evoluir um para o outro. Top-down e bottom-up checam um ao outro.
- O processo padrão tem seis etapas: problema, dados, metodologia, resposta, checagem e sensibilidade. As três primeiras acontecem antes da primeira fórmula.
- Problemas determinísticos têm uma resposta certa; estocásticos pedem cenários ou simulação. IA é estocástica: use-a para construir, não para processar.
- Separe premissas, dados, cálculo e resultado. Nada de hard number; cada premissa numa célula, com unidade e fonte.
- Padrão de cores com legenda, abas de instruções e metodologia, versões e backups fazem o modelo sobreviver ao autor.
- Tabelas nomeadas, LET, LAMBDA e PARÂMETRO deixam o modelo legível, dinâmico e auditável por construção.
- Todo modelo precisa de checks automáticos (diferença, não igualdade) com formatação condicional.
- No GAP: folha de R$ 7.488.000 por ano. Com o piso de 10% de ganho, a convenção de R$ 500 mil rende 5,6% e não passa na TMA de 12%; ela se paga com investimento de até R$ 471.428,57.
1.11Exercícios propostos
Use o modelo do GAP construído no Exercício 1 (ganho de produtividade 0%, salvo indicação).
- Selecione a Loja 9. Quantos itens ela vende por dia, quantos itens vende na hora de pico e qual é o seu quadro?
- Classifique como determinístico ou estocástico: (a) o 13º salário de um funcionário; (b) o número de clientes que entram numa loja no sábado; (c) o valor de uma parcela de financiamento com taxa fixa; (d) o câmbio no fim do ano.
- Um colega escreveu em E23 a fórmula
=E20/200/22. Que problemas ela tem? Reescreva-a. - A Área Comercial revisou o preço médio para R$ 250 (mesma venda em reais). Qual é o novo quadro total e a nova folha anual? Por que a folha cai?
- Se as lojas abrissem 26 dias por mês, qual seria a folha anual?
- Use a função
POSICOESdo Exemplo 1.7 para uma hora com 45 itens vendidos. Quantas pessoas de cada cargo são necessárias? - No cenário Otimista (20% de ganho), qual é a economia, o ganho líquido e o ROI da convenção de R$ 500 mil?
- Com o ganho de 10%, qual é o investimento máximo que mantém o ROI em pelo menos 12%? E o ROI se a convenção custar R$ 450 mil?
- Proponha dois checks automáticos para o modelo do GAP, além do check por loja × por cargo, e escreva as fórmulas.
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 2 · Modelagem · Capítulo 2
O modelo completo dos três demonstrativos
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →No Capítulo 1 você montou modelos pequenos, de uma pergunta só. Agora o objeto é outro: o modelo que sustenta a análise de uma empresa inteira. Ele junta três relatórios que todo gestor financeiro conhece, a DRE, o fluxo de caixa e o balanço, e os amarra de tal forma que qualquer mudança numa premissa (o market share, o prazo dado ao cliente, o salário de um cargo) aparece ao mesmo tempo no lucro, no caixa e no patrimônio. No mercado ele é chamado de three statement model, o modelo dos três demonstrativos, e é a base do valuation por fluxo de caixa descontado.
O capítulo segue a construção na ordem em que ela acontece no arquivo: primeiro as abas de detalhe (receita, custos, folha, depreciação), depois a DRE, o capital de giro, o fluxo de caixa com a dívida rotativa e, por fim, o balanço com o check de fechamento. No final, o modelo pronto é avaliado com XVPL e XTIR. O modelo é grande, mas cada bloco usa peças que você já conhece: SE, SOMASES, SOMARPRODUTO, FILTRO, referências mistas e intervalos que crescem.
- Explicar como DRE, fluxo de caixa e balanço se conectam: lucro vira caixa, caixa vira patrimônio.
- Construir a receita de baixo para cima (build-up por praça) e os custos a partir de drivers.
- Calcular o capital de giro a partir de dias de estoque, de recebíveis e de fornecedores.
- Montar o fluxo de caixa pelo método indireto e a dívida rotativa (revolver) com caixa mínimo.
- Fechar o balanço e usar o check de fechamento para auditar o modelo.
- Avaliar o fluxo projetado com XVPL e XTIR e estimar o valor da empresa por fluxo de caixa descontado.
2.1Três lentes do mesmo negócio
Os três demonstrativos olham para a mesma empresa, mas cada um responde a uma pergunta diferente.
- DRE (demonstração do resultado): quanto a empresa ganhou ou perdeu no período. Registra receitas e gastos pelo regime de competência, ou seja, quando acontecem, não quando o dinheiro entra ou sai.
- DFC (demonstração do fluxo de caixa): quanto dinheiro entrou e saiu do caixa no período, e por quê.
- Balanço patrimonial: o que a empresa tem (ativo) e a quem deve (passivo e patrimônio líquido) num instante. A DRE e o fluxo de caixa são filmes; o balanço é uma foto do fim do período.
A frase do slide resume a lógica: lucro vira caixa, caixa vira patrimônio. Um modelo financeiro não são três abas soltas; são três lentes amarradas por essa seta. Por isso o modelo só está pronto quando os três estão prontos e conversam entre si.
Todo evento da empresa tem duas pontas. Comprar estoque à vista aumenta o estoque e reduz o caixa; comprar a prazo aumenta o estoque e aumenta a conta de fornecedores; receber um aporte dos sócios aumenta o caixa e o capital social. Por isso o balanço está sempre equilibrado: total de ativos = total de passivos + patrimônio líquido. Quando o modelo não fecha, alguma ponta ficou de fora.
O fluxo de caixa deste capítulo usa o método indireto, o mais comum em finanças corporativas: começa no lucro da DRE e faz dois tipos de ajuste. O primeiro devolve o que reduziu o lucro mas não saiu do caixa (a depreciação). O segundo inclui o que não passou pela DRE mas mexeu no caixa (a variação do capital de giro, o investimento em ativos, a dívida e os dividendos).
Uma forma útil de ler o modelo: tome o balanço como relatório principal. A DRE é um zoom na linha de lucro acumulado (todas as linhas da DRE desembocam nela). O fluxo de caixa é um zoom na linha de caixa (todas as linhas do DFC desembocam nela).
2.2Premissas, drivers e o case
O case da sessão é o modelo completo de Empresa de Varejo: uma rede que abre postos comerciais pelo Brasil, com receita detalhada por praça, folha separada em back-office e postos, capital de giro, estrutura de dívida com revolver, impostos e dividendos. O arquivo é o EBP_Mod_ModeloCompleto@2026.xlsx. A estrutura, as premissas e as abas de detalhe vêm prontas; as células em branco são as fórmulas que você constrói.
| Bloco | Premissas e drivers | Onde fica |
|---|---|---|
| Receita | market share de 2% por praça; venda mínima de R$ 1,2 milhão por posto ao ano; crescimento de 5% ao ano; uma praça inaugurada por mês | Receita |
| Custos | CMV pela margem de 20 produtos e pelo mix; folha de back-office (cargos × FTE por posto) e de postos (1 coordenador e 3 vendedores por posto + comissão); marketing, aluguéis e outros | CMV, FoPag_Backoffice, FoPag_Postos, Mkt&Alugueis&Outros |
| Investimento | R$ 70 mil por inauguração, depreciados em 5 anos | Depreciacao |
| Capital de giro | 100 dias de estoque, 90 de fornecedores, 45 de recebíveis | Planilha_Calculos (Auxiliares) |
| Financeiro | capital social de R$ 10 milhões; dívida de longo prazo de R$ 2 milhões a 0,85% ao mês; revolver a 0,9% ao mês; aplicações a 0,8% ao mês; caixa mínimo de R$ 10 mil | Planilha_Calculos |
| Impostos e dividendos | deduções de 27,25% da receita bruta; IR/CSLL de 34% sobre o lucro antes do IR positivo; dividendos de 25% do lucro positivo | Planilha_Calculos (DRE) |
| Horizonte | 96 meses, de jan/2026 a dez/2033, com visão anual consolidada | Planilha_Calculos |
Tabela 2.1. Premissas do case. Capital social, dívida inicial e caixa mínimo são os valores usados em aula como cenário base.
A regra de organização é a da Sessão 1: premissas separadas do cálculo. Na aba Planilha_Calculos, as células de entrada têm fundo cinza e fonte azul; tudo o que é preto é fórmula. Cada aba de detalhe resolve uma parte do problema e entrega uma linha pronta para a Planilha_Calculos, que junta tudo nos três demonstrativos.
A linha do tempo dinâmica
Antes de qualquer número, o modelo precisa de um cabeçalho de datas. O arquivo traz a data inicial digitada em E3 e =DATAM(E3;1) (EDATE) copiado para a direita. O professor mostra a versão moderna, que deriva tudo de uma fórmula só.
E1: =SEQUÊNCIA(1;8*12) → 1, 2, ..., 96 (1 linha, 96 colunas)
E3: =DATA(2026;E1#;1) → jan-26 ... dez-33
E2: =ANO(E3#) → 2026 ... 2033
SEQUÊNCIA (SEQUENCE) com 1 linha e 8 × 12 colunas gera os números dos meses. A função DATA aceita mês maior que 12 e "vira o ano" sozinha: DATA(2026;13;1) é 01/01/2027. Por isso o mês 96 cai em dezembro de 2033. A linha 2 pega carona no despejo de E3 para mostrar o ano de cada coluna, útil para somar por ano depois.
O ideal é que o 8 (anos) e o 2026 (ano inicial) também sejam premissas em células próprias. Assim, atualizar o modelo para o ano seguinte é mudar um número, não editar fórmulas.
2.3A receita construída por praça
A receita não é um número solto: é construída de baixo para cima, a partir de um estudo de mercado. A aba Receita lista os 5.565 municípios do Brasil com o potencial líquido total de cada um (o tamanho do mercado inteiro, em R$ por ano). A construção tem três etapas.
- Calcular o potencial da empresa em cada município e quantos postos cabem nele.
- Montar uma lista dinâmica só com as praças que terão posto, com a data de inauguração.
- Calcular a receita de cada praça mês a mês e somar.
Etapa 1: potencial X e número de postos
O potencial X é o potencial líquido multiplicado pelo market share alvo (2%). O número de postos segue a regra da venda mínima: cada posto precisa de R$ 1,2 milhão por ano. Uma cidade com potencial X de R$ 1.199.000 não recebe posto; com R$ 1.200.000 recebe um; o segundo só vem com R$ 2.400.000.
E11: =D11:D5575*C3 → potencial X de todos os municípios
F11: =ARREDONDAR.PARA.BAIXO(E11#/$C$4;0) → nº de postos
C7: =SOMA(F11#) → 58 postos
- Manaus: 66.614.888,02 × 2% = 1.332.297,76; ÷ 1.200.000 = 1,11 → 1 posto.
- Rio de Janeiro: 10.879.656,16 ÷ 1.200.000 = 9,07 → 9 postos.
- São Paulo: 24.471.351,49 ÷ 1.200.000 = 20,39 → 20 postos.
=CONT.SES(F11#;">0") conta as praças com posto: 20.
Só =E11/$C$4 dá 139 "postos" no total, porque soma pedaços: uma cidade com potencial X de 8 mil tem 0,007 posto. O formato da célula mostra um traço e esconde o problema. ARREDONDAR.PARA.BAIXO (ROUNDDOWN) com zero casas resolve: não existe meio posto.
O professor usa o formato personalizado #.##0;-#.##0;"-": positivo, negativo e um traço no lugar do zero (Capítulo 1 do módulo Tools). Fica limpo, mas lembre: o traço só aparece quando o valor é exatamente zero.
Etapa 2: a lista dinâmica de praças
A segunda etapa traz para as colunas N:R só as 20 praças com posto, com potencial X, potencial mensal (÷ 12), nº de postos e data de inauguração. A lista precisa ser dinâmica: se o market share ou a venda mínima mudarem, praças entram e saem sozinhas.
O jeito clássico é criar um identificador único na coluna A, com um intervalo que cresce (o mesmo truque do "máximo até agora"), e buscar por ele:
A11: =SE(F11=0;0;MÁXIMO($A$10:A10)+1) → 1 em Manaus, 2 em Belém...
N11: =PROCX(M11;$A$11:$A$5575;$B$11:$B$5575)
O jeito moderno, preferido em aula, é FILTRO:
N11: =LET(f; FILTRO(EMPILHARH(B11:B5575;E11:E5575;F11:F5575); F11:F5575>0);
EMPILHARH(ESCOLHERCOLS(f;1;2); ESCOLHERCOLS(f;2)/$C$5; ESCOLHERCOLS(f;3)))
R11: =DATAM($V$10;SEQUÊNCIA(LINS(N11#);1;0))
FILTRO (FILTER) devolve localidade, potencial X e postos das linhas com postos > 0; EMPILHARH (HSTACK) junta colunas que não estão lado a lado; ESCOLHERCOLS (CHOOSECOLS) reorganiza o resultado e insere o potencial mensal no meio. A inauguração parte de fevereiro de 2026 (V10) e avança um mês por praça: Manaus em fev-26, Belém em mar-26... Brasília, a vigésima, em set-27.
Quem monta a lista com FILTRO só na localidade e depois busca o potencial com PROCX pelo nome cai numa armadilha: existem dois municípios chamados Santo André (PB e SP), e o da Paraíba aparece antes na base. A busca traz o potencial errado sem dar erro. Ou se traz tudo no mesmo FILTRO, como no Exemplo 2.3, ou se busca por um identificador único. Nome raramente é uma boa chave; código é.
Etapa 3: a escadinha de receita
Para cada praça e cada mês há três momentos: antes da inauguração (receita zero), no mês da inauguração (o potencial mensal) e depois. Depois, a receita repete a do mês anterior, a não ser no aniversário, quando cresce 5%.
V11: =SE(V$10<$R11; 0;
SE(V$10=$R11; $P11;
SE(CONT.SES($U11:U11;U11)=12; U11*(1+V$6); U11)))
- jan-26: antes da inauguração → 0.
- fev-26: mês da inauguração → 111.024,81 (1.332.297,76 ÷ 12).
- mar-26 a jan-27: repete → 111.024,81.
- fev-27: o valor de jan-27 já apareceu 12 vezes → 111.024,81 × 1,05 = 116.576,05.
O CONT.SES (COUNTIFS) com o início travado ($U11:U11) conta quantas vezes o valor do mês anterior já se repetiu. Trocando o 12 por 6, o crescimento vira semestral. As referências mistas são o coração da fórmula: V$10 trava a linha das datas, $R11 e $P11 travam as colunas da praça.
Totais da aba, na coluna de cada mês:
U7: =SOMA(U11:U66) → receita bruta mensal
U8: =SOMASES($Q$11:$Q$66;U$11:U$66;">0") → nº de postos abertos
Contar as células com receita não serve para o nº de postos: Belo Horizonte abre 4 postos de uma vez. SOMASES soma a coluna de postos das praças que já faturam. Em mar-26, com Manaus e Belém abertas, a receita bruta é 111.024,81 + 123.927,19 = 234.952,00 e há 2 postos.
Em out-27 o modelo projeta mais de R$ 6 milhões de receita por mês. Se alguém perguntar de onde vem esse número, a resposta está linha a linha: quanto vem de cada praça e de cada posto. Uma receita digitada como "crescimento de 20% ao ano" não tem essa rastreabilidade.
2.4Custos e despesas: do lucro bruto ao EBITDA
A receita bruta entra na DRE com =Receita!U7:DL7 em E4, uma fórmula que derrama os 96 meses. A partir dela, as linhas seguintes já estão no arquivo.
Deduções: =E4*E7 (E7 = 18% + 9,25% = 27,25%: ICMS e PIS/COFINS)
Receita líquida: =E4-E6
CMV: =E4*E12 (E12 = CMV em % da receita bruta)
Lucro bruto: =E9-E11
As deduções são os impostos sobre a venda e os cancelamentos. A receita líquida é a referência de todas as margens: margem bruta, margem EBITDA e o peso de cada despesa são calculados sobre ela.
O arquivo guarda custos e despesas como números positivos e subtrai nas linhas de resultado. Em uma das turmas o professor converteu tudo para negativo e passou a somar. Os dois padrões funcionam; o que não pode é misturar. Escolha um e mantenha em todo o modelo.
CMV pela margem e pelo mix
A empresa vende 20 produtos, cada um com a sua margem; a aba CMV traz a margem de cada produto (coluna C) e a participação de cada um nas vendas, mês a mês (o mix).
F29: =SOMARPRODUTO($C$6:$C$25;F6:F25) → margem média: 61,13%
F30: =1-F29 → CMV: 38,87% da receita bruta
Em fev-26: CMV = 111.024,81 × 38,87% = 43.155,34; lucro bruto = 80.770,55 − 43.155,34 = 37.615,21, margem bruta de 46,6% da receita líquida. Na Planilha_Calculos, E12: =CMV!F30:CW30 traz a linha inteira.
Selling, general and administrative: as despesas de vendas, gerais e administrativas. No modelo é a soma de folha de back-office, folha dos postos, marketing, aluguéis e outros. EBITDA = lucro bruto − SG&A.
Folha do back-office
O back-office é a equipe de escritório: diretoria, financeiro, marketing, RH. A aba tem três etapas: custo mensal de cada cargo, quantidade de pessoas e evolução do custo com o dissídio.
G16: =E16*F16 → PLR: 60.000 × 6 = 360.000
H16: =E16*(1+SOMA($C$5:$C$7))*$C$9+$C$8*$C$10+G16 → custo anual
I16: =H16/$C$8 → custo mensal
60.000 × (1 + 27,6% + 8% + 2%) × 13,3 = 1.098.048 de salário com encargos (INSS, FGTS, SAT); mais 12 × 400 = 4.800 de benefícios; mais 360.000 de PLR: 1.462.848 por ano, 121.904 por mês. O fator 13,3 é 12 salários + 13º + 1/3 de férias. A PLR entra sem encargos e os benefícios são 12, não 13.
A quantidade de pessoas combina duas lógicas. A primeira é o FTE por posto comercial: um analista financeiro dá conta de 30 postos, então o 31º posto exige o segundo analista. A segunda é a data de contratação: o CEO entra em janeiro, antes do primeiro posto. Prevalece a lógica que pede mais gente, e a ferramenta para isso é MÁXIMO, não um SE dentro de outro:
O16: =MÁXIMO(ARREDONDAR.PARA.CIMA(O$9/$D16;0); SE(E($J16<>"";O$15>=$J16);1;0))
Aqui o arredondamento é para cima: 31 postos ÷ 30 = 1,03 analista vira 2. O custo por cargo começa no valor da etapa 1 e cresce 5% todo setembro (mês do dissídio, em C11):
O32: =SE(MÊS(O$31)=$C$11; N32*(1+O$8); N32)
O44: =SOMARPRODUTO(O16:O25;O32:O41) → folha total do mês
Em jan-26, só o CEO: 121.904. Em fev-26, com o primeiro posto, entram os outros nove cargos: 315.277,60. Em set-26, o dissídio leva a folha a 331.041.
Folha dos postos comerciais
Nos postos a regra se inverte: em vez de uma pessoa cuidar de vários postos, cada posto tem 1 coordenador e 3 vendedores. O custo tem parte fixa (salário com encargos, corrigido em setembro) e parte variável (comissão sobre a receita).
Custo fixo mensal: coordenador 2.000 × 1,376 × 13,3 + 4.800 = 41.401,60 ÷ 12 = 3.450,13; vendedor 1.925,07.
M15: =$D15*M$9 → pessoas = por posto × postos
M25: =SOMARPRODUTO(M22:M23;M15:M16) → fixo total
M29: =$F15*M$10 → comissão = % × receita bruta
M39: =SOMA(M25;M32) → folha dos postos
Fixo: 3.450,13 + 3 × 1.925,07 = 9.225,33. Variável: (4,5% + 4%) × 111.024,81 = 9.437,11. Total: 18.662,44.
O exemplo do professor: uma pizzaria paga R$ 5 por entrega. Cem pizzas custam R$ 500 de entrega, seja um motoboy fazendo as cem entregas, seja cem motoboys fazendo uma cada. A comissão total é % × receita; multiplicá-la pela quantidade de pessoas é um erro comum.
A folha de back-office entra "de uma vez" no começo e depois cresce pouco: 30 postos ainda cabem num analista. A dos postos cresce com cada inauguração. Em 2027, a folha dos postos (11,3 milhões) já é quase o triplo da do back-office (4,2 milhões).
Marketing, aluguéis e outros
F6: =SEERRO(F5-E5;F5) → inaugurações do mês (variação do nº de postos)
F9: =$C9*F4 → 1% da receita bruta
F10: =$C10*F6 → R$ 15.000 por inauguração
F11: =$C11*F5 → R$ 3.000 por posto aberto
F21: =$C21*F5 → aluguel: R$ 6.000 por posto
F29: =$C29*F4 → outros: 0,3% da receita bruta
Fev-26: marketing = 1.110,25 + 15.000 + 3.000 = 19.110,25; aluguel 6.000; outros 333,07. Somando as cinco linhas, o SG&A de fev-26 é 359.383,37 e o EBITDA, −321.768,16.
No arquivo, o aluguel por posto fica em R$ 6.000 durante toda a projeção. Em aula, o professor sugeriu reajustá-lo uma vez por ano, com a mesma lógica do dissídio (=SE(MÊS(data)=1; anterior*(1+5%); anterior)). A diferença é grande: a margem EBITDA de 2033 cai de 5,6% para 3,4%. O Exercício proposto 3 pede esse ajuste.
O EBITDA e o que ele diz
Earnings before interest, taxes, depreciation and amortization: lucro antes de juros, impostos, depreciação e amortização (em português, LAJIDA). É o resultado da operação antes do que é contábil (depreciação), financeiro (juros) e fiscal (impostos). Por isso é a métrica mais usada para comparar a operação de empresas, e uma aproximação, com ressalvas, da geração de caixa operacional.
Depois do EBITDA, o resto da DRE é "tirar as letras de trás para frente": tira a depreciação (D e A) e chega no EBIT; soma o resultado financeiro (I) e chega no EBT; tira o imposto (T) e chega no lucro líquido.
2.5Depreciação e o fechamento da DRE
Cada inauguração exige R$ 70 mil de investimento (obra, mobiliário, vitrine). Esse gasto não entra na DRE de uma vez: vira ativo permanente e é lançado como despesa aos poucos, ao longo da vida útil, pela depreciação. Aqui, depreciação linear em 60 meses, sem valor residual: R$ 70.000 ÷ 60 = R$ 1.166,67 por mês por posto.
As três medem a perda de valor de um ativo ao longo do tempo. Depreciação é para ativos físicos (máquinas, obras, computadores); amortização, para intangíveis (software, licenças, concessões); exaustão, para ativos biológicos ou recursos naturais. Cuidado: "amortização" também é o nome da parte da parcela que reduz o saldo de uma dívida, um conceito diferente.
O professor avisa que este é o bloco mais desafiador do modelo. Dá para fazer em quatro linhas, mas a estrutura recomendada é uma matriz, como uma tabela de depreciação real: nas linhas, o mês em que o ativo foi adicionado; nas colunas, o mês corrente; no cruzamento, quanto aquele ativo deprecia naquele mês.
Linhas de apoio (mês a mês):
F4: =SEERRO(F3-E3;F3) → inaugurações
F10: =F4*$C$7 → ativo permanente adicionado
F9: =SOMA($F10:F10) → ativo permanente acumulado
Na matriz (B16 em diante: mês de adição e valor adicionado, trazidos com TRANSPOR das linhas 6 e 10):
G17: =SE(G$15<$B17; 0;
SE(G$15=$B17; $C17/$C$9;
SE(SOMA($E17:F17)>=$C17; 0; $C17/$C$9)))
F7: =SOMA(F16:F111) → depreciação do mês
F8: =SOMA($F7:F7) → depreciação acumulada
É a mesma lógica da escadinha da receita: antes da adição, zero; no mês da adição, já deprecia; depois, deprecia até a soma da linha chegar ao valor adicionado. Em jul-26, Belo Horizonte inaugura 4 postos (R$ 280 mil, que depreciam R$ 4.666,67 por mês) e os 5 postos anteriores seguem com R$ 1.166,67 cada: depreciação do mês = 5 × 1.166,67 + 4.666,67 = 10.500.
Cada real de depreciação tem origem conhecida: em jul-26, R$ 4.666,67 vêm dos postos de Belo Horizonte. A estrutura também acomoda ativos com prazos diferentes (um computador em 3 anos, uma obra em 10): basta uma coluna de prazo por linha no lugar do $C$9 fixo. Um check útil: valor adicionado − soma da linha nunca pode ser negativo; se for, a fórmula depreciou além do que o ativo custou.
Na Planilha_Calculos, três linhas vêm da aba Depreciacao: a depreciação (linha 27, positiva, porque a DRE subtrai), o ativo permanente (linha 63) e a depreciação acumulada (linha 73, com sinal negativo, porque é uma conta redutora do ativo). Os 58 postos somam 58 × 70.000 = R$ 4.060.000 de ativo permanente; como as inaugurações terminam em set-27, todo o ativo está depreciado em ago-32.
Resultado financeiro, IR/CSLL e dividendos
Essas linhas já vêm montadas no arquivo; vale entender o que cada uma faz.
F31: =E69*E114 → receita financeira: caixa do mês anterior × 0,8%
F32: =E112*E78+E113*E79 → despesa financeira: revolver × 0,9% + dívida LP × 0,85%
E38: =SE(E36<0;0;E36*E39) → IR/CSLL: 34% do EBT, só se positivo
E43: =SE(E41<0;0;E44*E41) → dividendos: 25% do lucro, só se positivo
Os juros usam o saldo do mês anterior. Em fev-26: 11.878.096 × 0,8% = 95.024,77 de receita financeira e 2.000.000 × 0,85% = 17.000 de despesa; o EBT de fev-26 é −322.934,82 + 78.024,77 = −244.910,06.
Seria mais preciso calcular os juros sobre a média entre o saldo inicial e o final do mês. Mas o saldo final depende do caixa, o caixa depende dos juros, e os juros dependem do saldo final: o Excel acusa uma referência circular. Dá para habilitar o cálculo iterativo (Arquivo › Opções › Fórmulas), mas o professor recomenda evitar: o modelo fica instável e mais difícil de auditar. Usar o saldo anterior é uma simplificação consciente.
O IR é calculado mês a mês, sobre o EBT positivo do mês, sem abater prejuízos anteriores. Por isso 2028 tem EBT anual positivo de 12.889, IR de 25.178 e lucro anual negativo (−12.289): os meses bons pagam imposto, os ruins não devolvem. A regra é uma simplificação (no lucro real há compensação de prejuízos, com limites); o mesmo vale para os dividendos, que o modelo só paga quando o lucro do mês é positivo.
Ninguém negocia juros pensando em 0,9% ao mês. Para comparar com a Selic, converta por equivalência de taxas: =(1+0,9%)^12-1 dá 11,35% ao ano. Uma linha 1,9% ao mês equivale a mais de 25% ao ano.
2.6Capital de giro: onde o caixa fica preso
O lucro da DRE não vira caixa na hora. O estoque e as vendas a prazo seguram dinheiro; os fornecedores, ao dar prazo, financiam a empresa. Essa diferença é o capital de giro, e no varejo ela pesa muito.
Capital de giro = Estoque + Recebíveis − Fornecedores (tecnicamente, ativo circulante operacional menos passivo circulante operacional). É o dinheiro que precisa estar "girando" dentro da operação, como o sangue no corpo. Quando o capital de giro aumenta, é caixa que deixou de entrar na conta; quando diminui, é caixa liberado.
| Driver (em dias) | Saldo que gera | Efeito no caixa |
|---|---|---|
| Dias de estoque (100) | Estoque = CMV × dias ÷ 30 | Prende caixa |
| Dias de recebíveis (45) | Duplicatas a receber = receita × dias ÷ 30 | Prende caixa: o cliente paga depois |
| Dias de fornecedores (90) | Fornecedores = compras × dias ÷ 30 | Libera caixa: você paga depois |
Tabela 2.2. Drivers do capital de giro. A conta é uma regra de três: o gasto do mês ÷ 30 dá o gasto por dia; × dias dá o saldo.
F56: =F11*F52/30 → estoque: 43.155,34 × 100 ÷ 30 = 143.851,15
F58: =F9*F54/30 → duplicatas: 80.770,55 × 45 ÷ 30 = 121.155,83
F57: =SOMA(F20:F22)*F53/30 → fornecedores: 25.443,32 × 90 ÷ 30 = 76.329,97
F59: =F56+F58-F57 → capital de giro: 188.677,01
F60: =E59-F59 → geração/consumo: −188.677,01
A variação é calculada como anterior − atual, de propósito: um aumento do capital de giro aparece negativo, já no sinal do fluxo de caixa. Em fev-26 a operação "consumiu" R$ 188,7 mil em giro.
Duas bases do arquivo merecem atenção. Os fornecedores são calculados sobre marketing, aluguéis e outros, não sobre o CMV (a compra de mercadoria). E as duplicatas usam a receita líquida, enquanto o cliente paga a receita bruta; em aula o professor comentou que o mais correto seria partir da receita bruta (Exercício proposto 5). Além disso, o fornecedor de aluguel já começa no saldo de "velocidade de cruzeiro" (3 meses de aluguel em aberto) desde o primeiro mês, quando na prática o saldo seria 6, 12 e só então 18 mil. São simplificações aceitáveis num modelo de estudo, desde que conhecidas.
A soma dos três prazos dá o ciclo de conversão de caixa: 100 + 45 − 90 = 55 dias. Ciclo positivo significa que crescer consome caixa: cada posto novo prende dinheiro em estoque e recebíveis antes de devolver. É o que acontece com força em mar-27, quando São Paulo abre 20 postos e o capital de giro do mês aumenta R$ 3,4 milhões. No fim de 2033, estoque e duplicatas somam R$ 21,4 milhões: é ali que está o dinheiro da empresa.
Uma alternativa usada no varejo brasileiro é a antecipação de recebíveis: a empresa troca as parcelas futuras do cartão por um valor menor hoje (12 parcelas de R$ 100 viram, digamos, R$ 1.100 à vista). Reduz as duplicatas a receber e libera caixa, mas tem custo financeiro. O professor apresentou a mecânica como extensão do modelo.
2.7Do lucro ao caixa: o fluxo de caixa
O DFC parte do lucro e corrige o que não é caixa (depreciação) e o que ficou preso (capital de giro). Ele começa no lucro antes dos dividendos, porque o dividendo não é operacional: é um fluxo entre a empresa e os sócios.
| Bloco do DFC | O que entra | Linhas do arquivo |
|---|---|---|
| Atividades operacionais | Lucro antes de dividendos + depreciação ± variação do capital de giro | 90, 92 e 94 |
| Atividades de investimento | Investimento em ativo permanente (capex) | 95 |
| Atividades de financiamento | Variação da dívida de longo prazo e do capital social; dividendos | 96 |
| (=) Fluxo de caixa do período | Soma dos três blocos | 98 |
Tabela 2.3. Os blocos do fluxo de caixa. No arquivo, a linha 94 tem o rótulo "Atividades operacionais", mas contém só a variação do capital de giro; o bloco operacional completo é a soma das linhas 90, 92 e 94.
Lucro antes de dividendos −244.910,06
(+) Depreciação 1.166,67
(−) Aumento do capital de giro −188.677,01
(−) Investimento −70.000,00
(±) Financiamento 0,00
(=) Fluxo de caixa do período −502.420,40
Com caixa inicial de 11.878.096 (o final de jan-26), o caixa de fev-26 fecha em 11.375.675,60.
A fórmula do financiamento no arquivo é =E79-D79-E43: variação da dívida de longo prazo menos dividendos. Se houvesse aporte de sócios, entraria também a variação do capital social (+E81-D81). A dívida rotativa fica de fora de propósito: ela é o resultado do próximo bloco.
Num valuation ou numa aquisição, o analista confere se cada linha está na atividade certa. O caso clássico: o sócio que opera a empresa e não tira salário, só dividendos. Na essência, esse dividendo é remuneração de gestão e deveria ser tratado como despesa operacional (um EBITDA ajustado). O mesmo vale para passivos que "têm cara de dívida", como prazo de fornecedor com juros embutidos.
2.8O revolver e o caixa mínimo
E se o caixa projetado ficar abaixo do mínimo? O modelo puxa dívida rotativa automaticamente. Isso é o revolver (cash sweep): a dívida aparece quando falta caixa e é paga, com prioridade, quando sobra.
Linha de crédito de curto prazo, sem garantia, como um cheque especial da empresa. No modelo é o plug: o valor que fecha a conta do caixa a cada mês, respeitando o caixa mínimo.
E99: caixa inicial = caixa final do mês anterior
E103: =E102+E99 → caixa projetado
E104: =E103-E100 → disponível acima do caixa mínimo
E106: =SE(E104+D106>0; 0; E104+D106) → dívida rotativa (saldo, com sinal negativo)
E107: =MÁXIMO(E103+E106+D106; E100) → caixa no final do período
Na linha 106 o saldo do revolver fica negativo (é dívida); no balanço, a linha 78 traz =-E$106, positivo do lado do passivo. A lógica: se o disponível do mês mais o saldo anterior do revolver é positivo, a dívida é quitada (zero); senão, o saldo novo é exatamente o que falta. Enquanto há dívida, o MÁXIMO segura o caixa no mínimo; quando a dívida é quitada, o excedente volta a se acumular no caixa.
São Paulo inaugura 20 postos. O fluxo do mês é −5.117.001,08 (−3.407.606,37 de capital de giro e −1.400.000 de investimento).
Caixa inicial (fev-27) 1.687.967,72
(+) Fluxo do período −5.117.001,08
(=) Caixa projetado −3.429.033,36
(−) Caixa mínimo 10.000,00
(=) Necessidade de dívida −3.439.033,36
Dívida rotativa: SE(−3.439.033,36 + 0 > 0; 0; −3.439.033,36) → 3.439.033,36 de dívida
Caixa final: MÁXIMO(−3.429.033,36 − 3.439.033,36 + 0; 10.000) → 10.000
A empresa toma R$ 3,44 milhões, cobre o buraco e fica com os R$ 10 mil mínimos. A dívida continua subindo até o pico de R$ 9.300.071 em mar-28 e depois começa a ser amortizada com o caixa gerado.
O revolver fecha o ciclo do modelo: caixa final → caixa do balanço → caixa inicial do mês seguinte → receita financeira do mês seguinte. É o que torna o modelo integrado e "vivo": mude um prazo, e a dívida, os juros, o lucro e o caixa se recalculam juntos. A célula D78, =MÁXIMO(E78:CV78), guarda o pico da dívida rotativa, a métrica que o Capítulo 3 vai analisar com Tabela de Dados.
2.9Fechando o balanço: amarração e check
| Lado | Composição |
|---|---|
| Ativo | Caixa + Estoque + Duplicatas a receber + Ativo permanente − Depreciação acumulada |
| Passivo | Fornecedores + Dívida rotativa + Dívida de longo prazo |
| Patrimônio líquido | Capital social + Lucros acumulados (lucro após dividendos, acumulado mês a mês) |
Tabela 2.4. Composição do balanço do modelo.
Cada linha do balanço vem de um lugar já calculado: nenhuma é digitada, exceto a posição inicial (coluna D: R$ 2 milhões de dívida de longo prazo e R$ 10 milhões de capital social, que somados são o caixa inicial de R$ 12 milhões).
Ativo: 11.375.675,60 + 143.851,15 + 121.155,83 + 70.000 − 1.166,67 = 11.709.515,91
Passivo + PL: 76.329,97 + 0 + 2.000.000 + 10.000.000 − 366.814,06 = 11.709.515,91
E86: =E75-E84 → 0
O lucro acumulado de fev-26 é o de jan-26 (−121.904,00) mais o lucro após dividendos de fev-26 (−244.910,06). O check dá zero nos 96 meses.
=E75=E84 parece natural, mas pode devolver FALSO com os dois totais iguais na tela: a diferença está na 12ª casa decimal, um erro de arredondamento do cálculo em ponto flutuante. Use =E75-E84 e uma formatação condicional com tolerância: verde se o valor está entre −0,1 e 0,1; vermelho fora disso.
O check garante que as pontas estão amarradas. Ele não detecta uma premissa errada nem uma fórmula que erra dos dois lados ao mesmo tempo. Ainda é preciso olhar os números: o estoque faz sentido diante da receita? A depreciação acumulada nunca passa do ativo permanente?
2.10Funções financeiras: XVPL e XTIR
Com o modelo fechado, a pergunta muda de "quanto" para "quanto vale". As funções VPL e TIR, vistas no início do módulo, supõem períodos iguais. As versões com X trabalham com o calendário real de cada fluxo.
=XVPL(taxa; fluxos; datas) EN: XNPV(rate; values; dates)
=XTIR(fluxos; datas; [estimativa]) EN: XIRR(values; dates; [guess])
- taxa: taxa de desconto anual.
- fluxos: os valores de caixa; para a XTIR, precisam incluir pelo menos um negativo (o investimento) e um positivo.
- datas: a data de cada fluxo. A primeira é a data-base: o primeiro fluxo não é descontado; cada um dos outros é dividido por (1 + taxa)^(dias desde a data-base ÷ 365).
=VPL(taxa; fluxos) (NPV) supõe períodos iguais e trata o primeiro valor como se ocorresse um período depois. Com fluxos mensais, ainda é preciso converter a taxa anual em mensal. A XVPL usa a taxa anual e as datas, sem essas armadilhas. Com os fluxos do modelo, a VPL com taxa mensal equivalente dá −14.344.306; a XVPL, −14.487.736. A diferença vem exatamente do desconto de um período a mais.
A XTIR é a taxa que zera a XVPL. Ela é anualizada e consistente com o calendário. A TIR clássica sobre datas irregulares distorce o resultado sem avisar.
2.11Valuation por fluxo de caixa descontado
O valor de uma empresa, pelo método mais usado no mercado, é o valor presente dos caixas que ela vai gerar. Três decisões definem o cálculo: que fluxo descontar, a que taxa e o que fazer depois do horizonte.
O caixa que a operação gera depois dos investimentos necessários, antes de qualquer pagamento a credores e sócios. Para não misturar operação com estrutura de capital, ele parte do EBIT, não do lucro:
FCL = EBIT − IR sobre o EBIT + depreciação ± variação do capital de giro − investimento
O fluxo de caixa do modelo (linha 98) inclui receitas e despesas financeiras e o financiamento; para avaliar a empresa, esses itens saem. No modelo, o IR sobre o EBIT segue a mesma regra da DRE: 34% nos meses de EBIT positivo.
Com o FCL mensal de jan-26 a dez-33, taxa de 12% ao ano (a do exemplo do slide) e crescimento de 5% na perpetuidade (o mesmo da receita):
=XVPL(12%; FCL; datas) → −14.487.736 (96 meses de projeção)
Valor terminal = FCL de dez-33 × 12 ÷ (12% − 5%)
= 221.267,63 × 12 ÷ 0,07 → 37.931.594 (em dez-33)
Valor terminal trazido a jan-26 → 15.458.501
Valor da empresa → 970.765
=XTIR(FCL com o valor terminal em dez-33; datas) → 12,88% ao ano
O valor terminal, uma simplificação para tudo o que vem depois do horizonte, responde por mais do que todo o valor da empresa: sem ele, a projeção vale −14,5 milhões. A XTIR de 12,88% fica pouco acima dos 12% exigidos. Com taxa de 15%, o valor vira −5,8 milhões.
A leitura de negócio é direta: do jeito que está, a expansão quase não cria valor. A empresa prende R$ 19,5 milhões em capital de giro, precisa de até R$ 9,3 milhões de dívida rotativa e só tem lucro anual a partir de 2029. O modelo serve para isso: mostrar onde mexer. Menos dias de estoque, prazos melhores, folha mais enxuta, margens maiores, e cada mudança aparece na hora no lucro, no caixa e no valor. O Capítulo 3 faz essa análise de forma sistemática, com Atingir Meta, Tabela de Dados e mapa de calor.
Múltiplos de mercado como EV/EBITDA ou P/L são um atalho: comparam a empresa com outras parecidas. Servem para checar se o fluxo descontado está numa ordem de grandeza razoável, mas não substituem a projeção: um múltiplo não sabe que esta empresa prende metade do faturamento anual em estoque.
Com 12% de taxa e 5% de crescimento, o denominador do valor terminal é 7%; com 15%, é 10%, e o valor terminal cai quase um terço. Sempre mostre o valuation com um intervalo de taxas e de crescimento, nunca como um número só. É exatamente o tipo de pergunta que a Tabela de Dados do Capítulo 3 responde.
2.12Exercícios resolvidos
O exercício da sessão é a construção guiada dos três demonstrativos no arquivo EBP_Mod_ModeloCompleto@2026.xlsx, aba Planilha_Calculos. As abas de detalhe, resolvidas ao longo das seções 2.3 a 2.5, entregam as linhas prontas; o trabalho aqui é ligar tudo, mês a mês, e terminar no check igual a zero.
Exercício 1: a DRE, da receita ao lucro retido
Tarefa: preencher as linhas em branco da DRE puxando das abas de detalhe e estender todas as fórmulas até dez-33.
E4: =Receita!U7:DL7 E12: =CMV!F30:CW30
E18: =FoPag_Backoffice!O44:DF44 E19: =FoPag_Postos!M39:DD39
E20: ='Mkt&Alugueis&Outros'!F12:CW12 E21: ='Mkt&Alugueis&Outros'!F21:CW21
E22: ='Mkt&Alugueis&Outros'!F29:CW29 E27: =Depreciacao!F7:CW7
Cada ligação traz a linha inteira de uma vez. As demais linhas (deduções, lucro bruto, SG&A, EBITDA, EBIT, financeiro, IR, dividendos) já existem até a coluna J; basta copiá-las até CV. A Tela No Excel 2.10 mostra o resultado; os totais anuais estão na Tabela 2.5.
Exercício 2: capital de giro, ativo permanente e balanço
Tarefa: completar as auxiliares (dias, saldos, variação), trazer o ativo permanente e a depreciação acumulada e ligar cada linha do balanço à sua origem.
E63: =Depreciacao!F9:CW9 E73: =-Depreciacao!F8:CW8
D79: 2.000.000 D81: 10.000.000
E100: 10.000 (caixa mínimo, copiado até CV)
E86: =E75-E84 (check)
As fórmulas de estoque, fornecedores, duplicatas, capital de giro e balanço seguem o Exemplo 2.10 e a Tabela 2.4; os dias (100, 90 e 45) são copiados até dez-33. Com a posição inicial em D79 e D81, o caixa inicial (D69 = D79 + D81) fica em R$ 12 milhões. A Tela No Excel 2.13 mostra o balanço e o check.
Exercício 3: fluxo de caixa e revolver
Tarefa: estender o DFC e o revolver até dez-33 e conferir o pico da dívida rotativa.
As fórmulas são as das seções 2.8 e 2.9, copiadas para a direita. Resultado: o caixa encosta no mínimo em mar-27, a dívida rotativa chega a R$ 9.300.071 em mar-28 e termina 2033 em R$ 6.904.373. O check dá zero em todos os meses.
| R$ mil | 2026 | 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 2033 |
|---|---|---|---|---|---|---|---|---|
| Receita bruta | 13.871 | 65.366 | 82.790 | 86.930 | 91.276 | 95.840 | 100.632 | 105.664 |
| Receita líquida | 10.091 | 47.554 | 60.230 | 63.242 | 66.404 | 69.724 | 73.210 | 76.870 |
| EBITDA | (2.866) | 136 | 2.024 | 2.438 | 2.873 | 3.330 | 3.810 | 4.313 |
| Margem EBITDA | −28,4% | 0,3% | 3,4% | 3,9% | 4,3% | 4,8% | 5,2% | 5,6% |
| Lucro antes de dividendos | (2.480) | (1.250) | (12) | 289 | 597 | 1.023 | 1.729 | 2.190 |
| Fluxo de caixa (linha 98) | (9.366) | (11.774) | 1 | 203 | 393 | 530 | 480 | 639 |
| Fluxo de caixa livre | (9.891) | (11.146) | 825 | 1.059 | 1.305 | 1.516 | 1.606 | 1.843 |
| Capital de giro (dez) | 5.415 | 14.162 | 14.948 | 15.774 | 16.641 | 17.551 | 18.507 | 19.511 |
| Dívida rotativa (dez) | – | 9.150 | 9.149 | 8.946 | 8.553 | 8.023 | 7.544 | 6.904 |
Tabela 2.5. Resumo anual do modelo completo no cenário base. O fluxo de caixa de 2026 na tabela exclui o aporte inicial de R$ 12 milhões, que está na coluna D.
Exercício 4: quebrar a amarração de propósito
Tarefa (demo do slide): depois de tudo fechado, quebrar uma ligação e ver o check acusar.
Troque o lucro acumulado para somar o lucro antes dos dividendos: =D82+E41 no lugar de =D82+E46. Nada muda até o primeiro mês com dividendo; em mar-28 o check vira −18,55, exatamente o dividendo do mês, e a diferença cresce até −1.469.336,70 em dez-33, a soma de todos os dividendos. O erro mostra a regra: o dividendo saiu do caixa (no DFC), mas não saiu do patrimônio. Cada ponta precisa ter a sua contrapartida.
- Ache o primeiro mês em que o check deixa de ser zero: o erro nasce ali.
- Compare a diferença com os valores daquele mês: ela costuma ser igual a uma linha (um dividendo, um fornecedor, uma depreciação) ou ao dobro dela (sinal trocado).
- Use F2 + Esc nas células daquela coluna para ver de onde cada número vem.
Desafio extra: visão anual com ÍNDICE e margem EBITDA com LAMBDA
Tarefa: consolidar os 12 meses de cada ano nas colunas CX:DE e criar a margem EBITDA como uma LAMBDA nomeada.
Para linhas de fluxo (receita, custos, lucro), o ano é a soma dos 12 meses. O arquivo usa SOMASE pela linha de anos; com ÍNDICE, a soma pega o bloco de 12 colunas pela posição:
CX4: =SOMASE($E$2:$CV$2;CX$3;$E4:$CV4) (arquivo)
CX4: =SOMA(ÍNDICE($E4:$CV4;CX$50-10):ÍNDICE($E4:$CV4;CX$50+1)) (com ÍNDICE)
Para linhas de saldo (estoque, caixa, dívida), o ano é o valor de dezembro, não a soma. O arquivo usa DESLOC com o deslocamento da linha 50 (11, 23, 35...); ÍNDICE faz o mesmo sem ser volátil:
CX56: =ÍNDICE($E56:$CV56;CX$50+1) → estoque de dez-26: 3.355.482
Para a margem, defina em Fórmulas › Gerenciador de Nomes o nome MargemEBITDA com:
=LAMBDA(ebitda; rl; SEERRO(ebitda/rl; 0))
e use =MargemEBITDA(CX24;CX9): −28,4% em 2026 e 5,6% em 2033. A mesma função serve para as colunas mensais e para qualquer outro modelo do arquivo.
Fórmulas como a da escadinha ou a da matriz de depreciação são boas candidatas para pedir a um assistente de IA: "explique esta fórmula linha a linha" ou "que casos ela não cobre?". Peça a explicação, teste com um caso que você sabe calcular de cabeça (Manaus em fev-27, por exemplo) e só então use.
- DRE, fluxo de caixa e balanço são três lentes do mesmo negócio: lucro vira caixa, caixa vira patrimônio. O modelo só está pronto quando os três fecham juntos.
- Premissas ficam separadas do cálculo; cada aba de detalhe entrega uma linha pronta para a Planilha_Calculos, e uma linha do tempo com SEQUÊNCIA e DATA dá o horizonte.
- A receita é construída por praça: potencial × market share, postos com ARREDONDAR.PARA.BAIXO, lista com FILTRO e escadinha com SE e CONT.SES (antes, na inauguração, depois e no aniversário).
- Custos vêm de drivers: CMV por SOMARPRODUTO de margem e mix; folha por cargo × quantidade (MÁXIMO de duas lógicas) com dissídio; comissão sobre a receita, nunca × pessoas.
- A depreciação reparte o investimento ao longo da vida útil; a matriz mês de adição × mês corrente mostra a origem de cada real depreciado.
- Capital de giro = estoque + recebíveis − fornecedores, calculados por dias; o aumento do capital de giro consome caixa e entra no DFC como anterior − atual.
- O DFC indireto parte do lucro antes dos dividendos, devolve a depreciação, desconta o giro e soma investimento e financiamento.
- O revolver é o plug: puxa dívida quando o caixa projetado fica abaixo do mínimo e a paga quando sobra caixa.
- Check = ativo − passivo − PL, por diferença e com tolerância. Zero garante amarração, não acerto das premissas.
- XVPL e XTIR usam datas reais; o valor da empresa é o XVPL do fluxo de caixa livre mais o valor terminal, e é muito sensível à taxa e ao crescimento.
2.13Exercícios propostos
Use o modelo completo já ligado (cenário base: capital de R$ 10 milhões, dívida de longo prazo de R$ 2 milhões, caixa mínimo de R$ 10 mil). Volte ao cenário base depois de cada item.
- Mude o market share para 3%. Quantas praças e quantos postos a empresa abre? Qual o pico da dívida rotativa?
- Volte o market share para 2% e mude a venda mínima por posto para R$ 2,4 milhões por ano. Quantas praças e postos? O que acontece com a dívida rotativa e com o lucro?
- Reajuste o aluguel por posto em 5% todo mês de janeiro, a partir de jan-27 (a lógica é a do dissídio). Qual o EBITDA e a margem EBITDA de 2033? E o pico da dívida rotativa?
- Reduza os dias de estoque de 100 para 30 em todos os meses. Qual o novo pico da dívida rotativa?
- Calcule as duplicatas a receber sobre a receita bruta, e não sobre a receita líquida. Qual o novo pico da dívida rotativa?
- Qual a taxa anual equivalente aos 0,9% ao mês do revolver?
- Refaça o valuation do Exemplo 2.14 com taxa de desconto de 15% ao ano. O que o resultado diz, comparado com a XTIR?
- Na Tela No Excel 2.14, o check de mar-28 é −18,55. Que número do modelo é esse? E por que a diferença em dez-33 é −1.469.336,70?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 2 · Modelagem · Capítulo 3
Sensibilidade e simulação
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →No Capítulo 2 você construiu um modelo que responde a uma pergunta por vez: com estas premissas, quanto sobra de caixa, quanto a empresa precisa de dívida, quanto vale o negócio. Só que premissa é estimativa. A receita pode vir 10% abaixo, o CMV pode subir dois pontos, o sócio pode aportar menos capital. Este capítulo ensina a testar o modelo contra a incerteza, em três níveis de sofisticação.
O primeiro nível é perguntar ao contrário: em vez de "qual o resultado com esta premissa?", "que premissa produz este resultado?". É o Atingir Meta. O segundo é varrer uma faixa inteira de valores de uma ou duas premissas e ver como a saída responde: é a Tabela de Dados, que vira um mapa de calor com formatação condicional. O terceiro é deixar várias premissas variarem ao mesmo tempo, de forma aleatória, milhares de vezes, e ler o resultado como uma distribuição: é a simulação de Monte Carlo. O professor chama essa parte de clímax do módulo, porque junta quase tudo o que o curso ensinou até aqui: matrizes dinâmicas, referência de despejo, contagem por critério e gráficos.
- Usar o Atingir Meta para descobrir a premissa que leva uma saída a um valor-alvo, e reconhecer seus limites.
- Montar Tabelas de Dados de 1 e de 2 variáveis ligadas a uma saída do modelo.
- Transformar a matriz de sensibilidade em mapa de calor, com escala de cor fixada à mão.
- Escolher entre cenários nomeados e Tabela de Dados.
- Gerar valores aleatórios com distribuição uniforme, normal e discreta.
- Construir um Monte Carlo moderno com MATRIZALEATÓRIA e INV.NORM.N, com uma fórmula despejada por linha do modelo.
- Ler o risco de uma simulação: média, percentis P5 e P95, probabilidade de prejuízo e histograma com FREQUÊNCIA.
3.1Atingir Meta: uma variável por vez
Todo modelo bem construído calcula de cima para baixo: premissas entram, resultado sai. Muitas perguntas de negócio, porém, vêm de baixo para cima. "Quanto preciso vender para empatar?" "Que preço leva o EBITDA a 1 milhão?" Dá para responder na tentativa e erro, digitando 20, 30, 25, 27, 27,5 na premissa até o resultado bater. O Atingir Meta (Goal Seek) faz exatamente isso, de forma automática.
Recurso em Dados › Teste de Hipóteses › Atingir Meta que altera uma célula de entrada até que uma célula de fórmula chegue a um valor-alvo. Ele testa valores em sequência, cada vez mais perto da resposta, e para quando encontra uma solução ou desiste.
A janela tem três campos:
| Campo | Preenchimento |
|---|---|
| Definir célula | O resultado que você quer atingir. Precisa conter uma fórmula |
| Para valor | O alvo numérico, digitado (não aceita referência a célula) |
| Alternando célula | A única entrada que pode variar. Precisa ser um valor, não uma fórmula |
Tabela 3.1. Os três campos do Atingir Meta.
Situação: um modelo de quatro premissas. Volume de vendas 500 (C2), preço 2.000 (C3), custos fixos 300 (C4) e custos variáveis de 20% da receita (C5). O EBITDA em F5 é =F2-F3-F4, com receita =C2*C3 e custos variáveis =F2*C5. Hoje ele dá 799.700.
- Clique em F5 e abra Dados › Teste de Hipóteses › Atingir Meta.
- Definir célula:
F5. Para valor:1000000. Alternando célula:C2. - OK. O Excel testa valores em C2 e mostra a janela de status.
Resultado: volume de 625,19. A conta confere:
EBITDA = volume × 2.000 × (1 − 20%) − 300 = 1.000.000
volume = (1.000.000 + 300) ÷ 1.600 = 625,1875
Na janela de status, OK grava 625,19 em C2, por cima da premissa original; Cancelar devolve o valor de antes. Se a pergunta fosse o preço, com volume fixo em 500, a resposta seria 2.500,75.
Ao confirmar, a premissa original some, e o modelo passa a mostrar o cenário "da meta". Se você quer só a resposta, anote o valor e clique em Cancelar; se já confirmou, Ctrl+Z desfaz. Em modelo compartilhado, uma premissa alterada sem aviso é um erro difícil de achar depois.
Agora o mesmo recurso numa pergunta clássica de negócio, sobre o arquivo do exercício de simulação. A aba Monte_Carlo_ex traz, na coluna C, a Projeção Base de um resultado operacional (em US$ mil): receita bruta de 1.350.000, deduções de 13%, CMV de 21% da receita líquida, despesas fixas e variáveis, depreciação, juros, IR e dividendos. O lucro antes de IR da projeção base é 83.915.
Pergunta: com as demais premissas fixas, qual receita bruta zera o lucro antes de IR?
- Atingir Meta com Definir célula
C52(Lucro antes de IR), Para valor0, Alternando célulaC6(Receita Bruta). - OK.
Resultado: receita bruta de 1.206.039, 10,7% abaixo da projeção base. A conta fechada confirma: o lucro antes de IR é 67% da receita líquida (100% − 21% de CMV − 12% de despesas variáveis) menos 703.000 de custos fixos, depreciação e juros. Zerar exige receita líquida de 703.000 ÷ 0,67 = 1.049.254, ou seja, receita bruta de 1.049.254 ÷ 0,87 = 1.206.039.
Os limites do Atingir Meta
O slide resume em uma frase: Atingir Meta encontra UMA solução, não A solução. Três limites decorrem disso.
- Só uma entrada. Se a meta pode ser atingida mexendo em preço, volume e custo, o Atingir Meta só olha uma delas. Para várias variáveis ao mesmo tempo, com restrições, existe o Solver, tema do Capítulo 4.
- Sem restrições. Não dá para pedir "volume inteiro" ou "preço acima de 1.800". No Exemplo 3.1, 625,19 unidades não existem; o Solver aceitaria a restrição de número inteiro.
- Pode não convergir. Se nenhum valor da entrada produz o alvo, ele avisa que não encontrou solução. Exemplo dado em aula: com a fórmula
=C2^2, pedir o valor −25 não tem resposta, porque nenhum número real elevado ao quadrado dá negativo. Em modelos com SE e degraus, ele também pode parar numa solução e ignorar outra.
Antes de perguntar "qual receita dá lucro zero?", olhe como o lucro responde a uma faixa de receitas (seção 3.2). A tabela mostra se a relação é suave, se há degraus e se existe mais de uma resposta. Com esse mapa na mão, o Atingir Meta deixa de ser uma caixa-preta.
3.2Tabela de Dados: 1 e 2 variáveis
O Atingir Meta responde a uma pergunta pontual. A Tabela de Dados (Data Table) responde a uma família inteira de perguntas: "qual o lucro para cada receita de 1,1 a 1,6 milhão?". Ela pega cada valor de uma lista, coloca na célula de entrada do modelo, recalcula e anota a saída ao lado. É o que você faria copiando e colando cada valor à mão, só que de uma vez.
Recurso em Dados › Teste de Hipóteses › Tabela de Dados que calcula uma ou mais saídas do modelo para uma lista de valores de uma entrada (1 variável) ou para todas as combinações de duas entradas (2 variáveis). O resultado fica preso à fórmula {=TABELA(entrada_linha;entrada_coluna)}, que o Excel escreve sozinho.
A estrutura precisa ser preparada antes de abrir o comando:
- 1 variável: os valores a testar ficam numa coluna. Na linha de cima, uma célula à direita, vai a fórmula que aponta para a saída do modelo (pode haver várias saídas lado a lado). Na janela, preencha só a célula de entrada da coluna.
- 2 variáveis: uma matriz. Os valores de uma entrada ficam na primeira coluna, os da outra na primeira linha, e a fórmula da saída vai no canto onde as duas se cruzam. Na janela, preencha as duas células de entrada: a da linha recebe os valores da primeira linha, a da coluna, os da primeira coluna.
- A fórmula de referência aponta para a célula de resultado do modelo. Escreva
=C58, não uma conta nova: a Tabela de Dados funciona justamente porque reaproveita o modelo inteiro.
Situação: numa área livre da aba (H71:J78), testar receitas brutas de 1.100.000 a 1.600.000, de 100 mil em 100 mil, e ler o EBITDA e o lucro líquido antes de dividendos.
- H73:H78: os valores de receita. Pode digitar ou usar
=SEQUÊNCIA(6;1;1100000;100000)e colar como valores. - I72:
=C40(EBITDA). J72:=C58(lucro líquido antes de dividendos). - Selecione H72:J78, incluindo a linha das fórmulas e a coluna dos valores.
- Tabela de Dados: célula de entrada da coluna
$C$6. OK.
| Receita bruta | EBITDA | LL antes de dividendos |
|---|---|---|
| 1.100.000 | −8.810 | −40.795 |
| 1.200.000 | 49.480 | −2.323 |
| 1.300.000 | 107.770 | 36.148 |
| 1.400.000 | 166.060 | 74.620 |
| 1.500.000 | 224.350 | 113.091 |
| 1.600.000 | 282.640 | 151.562 |
Leitura: cada 100 mil de receita bruta acrescenta 58.290 ao EBITDA e 38.471 ao lucro líquido. O lucro troca de sinal entre 1,2 e 1,3 milhão, o que bate com o ponto de equilíbrio de 1.206.039 do Exemplo 3.2.
A Tabela de Dados só aceita células de entrada da própria planilha onde ela está. Se as premissas ficam em outra aba, monte a tabela na aba das premissas ou traga a premissa para a aba da tabela e faça o modelo apontar para ela.
Situação: cruzar as mesmas seis receitas com cinco níveis de CMV, de 17% a 25% da receita líquida.
- H81:
=C58(a saída, no canto). - I81:M81: 17%, 19%, 21%, 23%, 25%. H82:H87: as seis receitas.
- Selecione H81:M87 e abra a Tabela de Dados.
- Célula de entrada da linha:
$C$14(CMV %). Célula de entrada da coluna:$C$6(receita bruta). OK.
| Receita \ CMV | 17% | 19% | 21% | 23% | 25% |
|---|---|---|---|---|---|
| 1.100.000 | −15.530 | −28.162 | −40.795 | −53.427 | −66.059 |
| 1.200.000 | 25.238 | 11.458 | −2.323 | −16.104 | −29.885 |
| 1.300.000 | 66.007 | 51.077 | 36.148 | 21.219 | 6.290 |
| 1.400.000 | 106.775 | 90.697 | 74.620 | 58.542 | 42.464 |
| 1.500.000 | 147.543 | 130.317 | 113.091 | 95.865 | 78.639 |
| 1.600.000 | 188.311 | 169.937 | 151.562 | 133.188 | 114.814 |
Leitura: a célula de 1.350.000 e 21% não aparece na tabela, mas fica entre 36.148 e 74.620, como deve ser (o valor da projeção base é 55.384). Com receita de 1,3 milhão, o lucro aguenta CMV de até 25%; com 1,2 milhão, o prejuízo começa já em 21%.
O erro mais comum é inverter as entradas: colocar a receita como entrada da linha e o CMV como da coluna. O Excel não reclama e preenche a matriz com números sem sentido (no exemplo, ele colocaria 17% na receita bruta). Lembre: entrada da linha = valores que estão na primeira linha da tabela. Depois de gerar, confira uma célula contra o modelo: troque as premissas à mão para 1.300.000 e 23% e veja se C58 dá 21.219.
Recalcula tudo N vezes
Para preencher a matriz do Exemplo 3.4, o Excel recalcula o modelo 30 vezes, uma por combinação, e repete isso a cada alteração em qualquer célula da pasta. Num modelo pequeno, não se percebe. No modelo completo do Capítulo 2, com milhares de linhas de receita e 96 meses, uma tabela de 88 combinações deixa cada Enter lento.
Em Fórmulas › Opções de Cálculo, escolha Automático, exceto para tabelas de dados. O modelo continua recalculando normalmente, mas as Tabelas de Dados só se atualizam quando você tecla F9. Lembre-se de teclar antes de ler a tabela: uma matriz desatualizada não avisa que está velha.
Duas outras características da Tabela de Dados:
- O resultado é um bloco único. A fórmula
{=TABELA(...)}ocupa a área toda. Não dá para apagar ou editar uma célula do meio; para mudar, selecione o bloco inteiro de resultados e apague. - As entradas podem ser fórmulas. Se a primeira coluna vier de
=SEQUÊNCIA(...)ligada a células de início e passo, você muda a faixa testada sem refazer a tabela. O professor mostrou isso em aula: a tabela "está viva" e se recalcula com os novos valores.
3.3Mapa de calor de sensibilidade
Uma matriz de sensibilidade crua é ilegível de relance. Para achar onde o lucro vira prejuízo no Exemplo 3.4, é preciso ler número por número. A formatação condicional com escala de cor resolve: cada célula ganha uma cor proporcional ao valor, e as zonas de risco e de oportunidade saltam aos olhos.
- Selecione só os resultados, I82:M87 (sem a linha e a coluna de entradas).
- Página Inicial › Formatação Condicional › Escalas de Cor › Mais Regras.
- Estilo: Escala de 3 cores.
- Mínimo: tipo Número, valor
-70000, cor vermelha. Ponto médio: tipo Número, valor0, cor amarela. Máximo: tipo Número, valor190000, cor verde. - OK.
Resultado: a diagonal amarela marca a fronteira entre lucro e prejuízo; tudo acima e à direita dela é vermelho. O ponto médio fixado em zero faz o amarelo significar exatamente "empate".
Por padrão, a escala usa o menor e o maior valor da seleção. Se uma premissa muda, ou se a tabela vem de uma simulação que muda a cada F9, as cores se reajustam: o mesmo número pode ser verde hoje e amarelo amanhã. Com tipo Número e valores digitados, cada cor passa a ter um significado fixo. Escolha os limites pelo negócio (zero, a meta, o teto de dívida), não pelos dados.
A escala padrão do Excel pinta o mínimo de vermelho e o máximo de verde. Isso serve para lucro, mas inverte o sentido quando a saída é algo que você quer baixo, como dívida ou custo. Nesses casos, troque as cores: verde no mínimo, vermelho no máximo. É o caso do Exercício 1, na seção 3.8.
3.4Cenários × Tabela de Dados: qual usar
No Capítulo 2 você construiu o seletor de cenários moderno: uma validação de dados com Otimista, Base e Pessimista e um PARÂMETRO (SWITCH) que traduz a escolha em premissas. A Tabela de Dados parece fazer algo parecido, mas responde a outra pergunta.
| Cenários (poucos, nomeados) | Tabela de Dados (varredura contínua) |
|---|---|
| Otimista / Base / Pessimista: versões discretas do futuro | Varre uma faixa inteira de um ou dois drivers |
| Cada cenário muda várias premissas de uma vez, de forma coerente | Mexe em 1 ou 2 entradas e mantém o resto fixo |
| Seletor por PARÂMETRO + validação de dados (Capítulo 2) | Matriz de saída + mapa de calor |
| Bom para apresentar à diretoria e comparar histórias | Bom para achar limites, pontos de virada e a premissa que mais pesa |
Tabela 3.2. Cenários nomeados e Tabela de Dados se complementam.
Os dois convivem: uma Tabela de Dados pode rodar com o seletor em "Pessimista", e você compara o mapa de calor dos dois cenários. E nenhum dos dois responde à pergunta "qual a chance de dar prejuízo?". Para isso é preciso deixar todas as premissas incertas variarem ao mesmo tempo, que é o tema da seção 3.6.
Sensibilidade no modelo completo
O exercício da sessão aplica a Tabela de Dados ao modelo dos três demonstrativos do Capítulo 2, na aba Planilha_Calculos do arquivo EBP_Mod_ModeloCompleto@2026.xlsx. A pergunta de negócio é a do próprio modelo: com quanto capital social e quanta dívida de longo prazo (BNDES) a empresa consegue operar sem depender demais da dívida rotativa, o revolver que cobre o caixa quando ele fica abaixo do mínimo?
A saída é o pico da dívida rotativa em todo o horizonte, já calculado em D78 com =MÁXIMO(E78:CV78). As entradas são o capital social (D81) e a dívida de longo prazo (D79). A aba já traz o esqueleto da análise nas linhas 117 a 133: dívidas de 500 mil a 4 milhões em E120:L120, capitais de 5 a 15 milhões em D121:D131 e uma meta (Target) de 4 milhões em E133.
Situação: com a dívida de longo prazo fixa em 2 milhões (o cenário base), quanto de revolver a empresa precisa para cada capital social?
Montada como tabela de 1 variável (valores de capital em coluna, =D78 em cima, entrada da coluna $D$81), ela devolve:
| Capital social | Pico da dívida rotativa |
|---|---|
| 5.000.000 | 3.798.815 |
| 6.000.000 | 2.704.744 |
| 7.000.000 | 1.610.673 |
| 8.000.000 | 517.112 |
| 9.000.000 | 0 |
| 10.000.000 | 0 |
Leitura: cada milhão a mais de capital reduz o pico de revolver em 1.094.071, um pouco mais que o próprio milhão, porque o capital não paga juros e a dívida rotativa paga (0,9% ao mês no modelo). A partir de 9 milhões, o revolver deixa de ser necessário. O cenário base do modelo (10 milhões de capital e 2 milhões de BNDES) já opera sem ele.
Os valores deste exemplo e do Exercício 1 vêm do modelo completo de referência do curso, com as premissas do arquivo. Em aula, com o modelo montado ao vivo e premissas ajustadas durante a explicação, o professor chegou a picos de revolver bem maiores no cenário base. Se o seu modelo do Capítulo 2 tiver outra premissa, os números mudam; a mecânica é a mesma.
3.5Monte Carlo: quando simular
Até aqui, toda análise foi determinística: dada a premissa, sai um resultado. A Tabela de Dados testa várias premissas, mas uma de cada vez e sem dizer qual é mais provável. O Monte Carlo trata a premissa como ela é: uma variável incerta, com um valor mais provável e uma dispersão em torno dele. É a ponte com a distinção do Capítulo 1 entre modelo determinístico e estocástico.
A ideia é sortear um valor plausível para cada premissa incerta, calcular o resultado, anotar, e repetir mil, cinco mil, dez mil vezes. No fim, em vez de um lucro, você tem mil lucros, e pode perguntar: em quantos deu prejuízo? Qual o pior resultado em 20? O nome vem do cassino de Monte Carlo, porque o método funciona como uma roleta girada muitas vezes.
Simular faz sentido quando três condições se juntam:
- Há incerteza relevante nas entradas. Demanda, custo de insumo, câmbio. Uma comissão contratual de 3% da receita praticamente não varia; a folha de pagamento varia com horas extras, faltas, férias e demissões.
- O resultado importa em faixa, não como número único. A diretoria quer saber a chance de prejuízo ou o caixa no pior caso razoável, não só o valor esperado.
- O modelo já está construído e testado. Simular sobre um modelo quebrado só multiplica o erro, mil vezes.
Medida de quanto uma variável costuma se afastar da média. Quando a empresa guarda as projeções passadas e os valores realizados, o desvio padrão dos erros de projeção é uma boa estimativa da incerteza de cada premissa. Na aba Monte_Carlo_ex, a coluna D traz esse desvio para cada linha com premissa (as células cinza): 202.500 para a receita bruta, 56.000 para a folha fixa, 1,2 ponto percentual para o marketing.
Distribuições na prática
Para sortear, é preciso dizer como a premissa varia. Três formatos cobrem a maioria dos casos de negócio.
| Distribuição | Quando usar | Fórmula |
|---|---|---|
| Uniforme | Qualquer valor da faixa é igualmente provável | ALEATÓRIO() (RAND) / ALEATÓRIOENTRE(início;fim) (RANDBETWEEN) |
| Normal | Valor central mais provável, desvios para cima e para baixo simétricos | INV.NORM.N(ALEATÓRIO();média;desvio) (NORM.INV) |
| Discreta | Poucas categorias, cada uma com sua probabilidade | PROCX aproximado sobre a tabela de probabilidade acumulada |
Tabela 3.3. Distribuições e fórmulas. ALEATÓRIO devolve um número entre 0 e 1, diferente a cada recálculo; ALEATÓRIOENTRE, um inteiro entre dois limites, útil para sorteios.
A normal (curva de Gauss, ou "de sino") é a mais usada e é a do exercício. Ela fica definida por dois números: a média, que diz onde fica o pico, e o desvio padrão, que diz quão aberta é a curva. Um desvio pequeno dá uma curva estreita, com quase tudo perto da média; um desvio grande, uma curva aberta, com resultados distantes mais frequentes.
O truque para sortear da normal está na função INV.NORM.N. Ela recebe uma probabilidade p entre 0 e 1 e devolve o valor da curva que deixa p da área à sua esquerda. Com p = 50%, devolve a própria média; com p pequeno, um valor baixo; com p perto de 1, um valor alto. Se p for sorteado por ALEATÓRIO, uniforme entre 0 e 1, o resultado é um sorteio da curva normal.
Situação: receita bruta com média 1.350.000 (C6) e desvio 202.500 (D6). Digite uma probabilidade numa célula livre e veja o valor correspondente.
=INV.NORM.N(0,5;$C$6;$D$6) → 1.350.000 (a média)
=INV.NORM.N(0,05;$C$6;$D$6) → 1.016.917 (P5: só 5% dos casos abaixo)
=INV.NORM.N(0,95;$C$6;$D$6) → 1.683.083 (P95: só 5% dos casos acima)
=INV.NORM.N(0;$C$6;$D$6) → #NÚM!
Leitura: entre P5 e P95 ficam 90% dos casos: a média mais ou menos 1,645 desvio padrão. A probabilidade 0 dá erro, assim como a 1: a curva normal nunca encosta no eixo, então não existe um valor abaixo do qual não há nenhum caso. Com 0,00001, a fórmula já devolve um número.
Situação: a demanda do próximo ano será Baixa (30% de chance), Média (50%) ou Alta (20%).
Monte a tabela com a probabilidade acumulada até antes de cada categoria: 0 para Baixa, 0,3 para Média, 0,8 para Alta. Depois sorteie:
=PROCX(ALEATÓRIO(); {0;0,3;0,8}; {"Baixa";"Média";"Alta"}; ; -1)
O último argumento, -1, pede correspondência exata ou o próximo menor. Um sorteio de 0,65 cai entre 0,3 e 0,8 e devolve "Média"; 0,12 devolve "Baixa"; 0,93, "Alta". Como ALEATÓRIO é uniforme, 30% dos sorteios caem em [0; 0,3), 50% em [0,3; 0,8) e 20% em [0,8; 1).
3.6O motor moderno: MATRIZALEATÓRIA
Com INV.NORM.N e ALEATÓRIO você consegue gerar uma projeção: troque cada premissa cinza da coluna C por uma fórmula aleatória e o modelo dá um lucro sorteado. Para mil projeções, é preciso repetir o modelo mil vezes. Aqui aparece a diferença entre o jeito antigo e o moderno.
O jeito antigo era colar a fórmula célula a célula. Na aba Monte_Carlo_ex, cada coluna a partir de F é uma projeção, e cada uma das 40 linhas do modelo (13 premissas e 27 contas) precisa de uma fórmula em cada coluna. Para 1.000 projeções são 40 mil fórmulas. O arquivo fica pesado, o Excel recalcula tudo a toda hora, e mudar para 5.000 projeções exige descobrir qual é a coluna 5.000 e copiar tudo de novo. O slide fala em 86 mil fórmulas na solução antiga completa; o professor sugeriu, como teste, fazer 16 mil projeções desse jeito e ver o tamanho do arquivo.
O jeito moderno usa MATRIZALEATÓRIA (RANDARRAY), uma função de matriz dinâmica que devolve uma matriz inteira de números aleatórios entre 0 e 1.
=MATRIZALEATÓRIA([linhas];[colunas];[mín];[máx];[inteiro]) despeja uma matriz de números aleatórios. Sem argumentos, devolve um número entre 0 e 1, como ALEATÓRIO. Com (1000;1), despeja mil números numa coluna; com (1;1000), mil números numa linha. Mín, máx e inteiro permitem sortear outras faixas e só inteiros.
Dentro de INV.NORM.N, cada um dos mil números uniformes vira um sorteio da normal:
=INV.NORM.N(MATRIZALEATÓRIA(1000;1); 50000; 8000)
Situação: o exemplo do slide. Uma margem com média 50.000 e desvio 8.000.
- Numa célula vazia com espaço abaixo, digite a fórmula acima.
- O resultado derrama mil valores na coluna. Teste com
=MÉDIA(A1#),=PERCENTIL(A1#;0,05)e=PERCENTIL(A1#;0,95), trocando A1 pela célula da fórmula.
Resultado: a média fica perto de 50.000, P5 perto de 36.841 e P95 perto de 63.159 (50.000 ± 1,645 × 8.000). "Perto" porque cada F9 sorteia mil números novos, e as estatísticas oscilam um pouco a cada vez. Para mudar para 5.000 cenários, troque só o 1000.
| Ontem: ALEATÓRIO colado | Hoje: MATRIZALEATÓRIA despejada | |
|---|---|---|
| Fórmulas para 1.000 projeções | 40 mil (40 linhas × 1.000 colunas) | 40 (uma por linha do modelo) |
| Mudar o número de projeções | Copiar e colar até a nova coluna final | Trocar um número (C4) |
| Peso do arquivo | Grande e lento | Leve |
| Análise sobre os resultados | Intervalos fixos, que precisam ser estendidos | Referência de despejo (F58#) acompanha o tamanho |
Tabela 3.4. O motor de simulação, antes e depois das matrizes dinâmicas.
Volatilidade e controle do recálculo
No Capítulo 3 do Tools você viu a lista das funções voláteis, que se recalculam a cada alteração em qualquer célula da pasta: HOJE, AGORA, DESLOC, INDIRETO, ALEATÓRIO, ALEATÓRIOENTRE e MATRIZALEATÓRIA. O curso recomenda evitá-las. O Monte Carlo é a única exceção tolerada: aqui a volatilidade é o objetivo, porque cada recálculo é uma nova rodada da roleta.
- F9 recalcula a pasta e sorteia tudo de novo. Use para ver se as conclusões se mantêm de uma rodada para outra.
- Durante a construção, ponha o cálculo em Fórmulas › Opções de Cálculo › Manual. Assim cada Enter não dispara mil sorteios, e você recalcula com F9 quando quiser. Volte para Automático no fim.
- Quando a análise fechar e o resultado for apresentado, congele: copie a área despejada e cole como valores (Ctrl+Alt+V › Valores) numa aba de registro. Os números da apresentação deixam de mudar a cada Enter.
Toda simulação deste capítulo mostra valores aproximados de uma rodada de referência, gerada com uma semente fixa para a apostila ficar reprodutível. No seu Excel, cada F9 dá números diferentes: a média, os percentis e a probabilidade de prejuízo vão oscilar em torno dos valores mostrados. Se a diferença for grande (por exemplo, 40% de prejuízo em vez de algo perto de 27%), aí sim há algum erro de fórmula.
3.7Ligando o motor ao negócio e lendo o risco
Gerar números aleatórios é metade do trabalho. A outra metade é fazer esses números passarem pelo modelo de negócio e resumir o resultado.
- O spill de cenários alimenta o modelo. Cada linha de cálculo passa a operar sobre os intervalos despejados: em vez de
=F6*F9,=F6#*F9#. Assim o modelo inteiro roda mil vezes, e cada linha despeja mil resultados. - Percentis:
=PERCENTIL(spill;0,05)e=PERCENTIL(spill;0,95)(PERCENTILE; a forma novaPERCENTIL.INCdá o mesmo resultado) delimitam a faixa onde caem 90% dos cenários. - Probabilidade de prejuízo:
=CONT.SES(spill;"<0")/CONT.VALORES(spill): quantos cenários deram negativo, divididos pelo total. - Histograma:
=FREQUÊNCIA(spill;limites)(FREQUENCY) conta quantos valores caem em cada faixa, numa fórmula só, e um gráfico de colunas mostra a distribuição inteira.
=FREQUÊNCIA(dados;limites) devolve, despejada, a contagem de valores em cada faixa. A primeira faixa conta os valores menores ou iguais ao primeiro limite; cada faixa seguinte conta os maiores que o limite anterior e menores ou iguais ao seu; e há sempre uma faixa a mais no fim, com os valores acima do último limite. Com 13 limites, ela devolve 14 contagens.
Em aula o histograma foi montado com CONT.SES, uma faixa por linha, com dois critérios (">="&início e "<"&fim). Funciona, desde que o sinal de igual fique em um dos lados só: com >= e <= nas duas pontas, um valor exatamente no limite é contado duas vezes; sem igual nenhum, ele some. As faixas das pontas (menos infinito e mais infinito) têm um critério só. Um check que pega esse erro: a soma das contagens tem de dar exatamente o número de projeções. A FREQUÊNCIA já resolve as pontas e os limites sozinha.
O suplemento Ferramentas de Análise (Arquivo › Opções › Suplementos) tem um comando de histograma. Ele roda uma vez, grava valores e um gráfico numa aba nova e não muda mais: um F9 não o atualiza. Para Monte Carlo, que vive de recalcular, prefira a FREQUÊNCIA despejada.
3.8Exercícios resolvidos
Exercício 1: mapa de calor de sensibilidade (aba Planilha_Calculos)
Arquivo: EBP_Mod_ModeloCompleto@2026.xlsx, com o modelo completo do Capítulo 2.
Tarefa: montar uma Tabela de Dados de 2 variáveis sobre uma saída do modelo completo e transformá-la em mapa de calor. Aplicar a escala de cor, fixar o mínimo e o máximo e identificar a zona que exige revolver. Desafio: trocar a saída para a margem EBITDA anual e comparar a que driver a saída é mais sensível.
Passo 1: a saída no canto. D120 já contém =D78, o pico da dívida rotativa. A fonte da célula é branca: o número existe, mas não aparece, para não ser confundido com um resultado da tabela. É uma convenção comum para a célula do canto.
Passo 2: a Tabela de Dados. Selecione D120:L131. Em Dados › Teste de Hipóteses › Tabela de Dados:
Célula de entrada da linha: $D$79 (dívida de longo prazo, valores em E120:L120)
Célula de entrada da coluna: $D$81 (capital social, valores em D121:D131)
O Excel preenche E121:L131 com {=TABELA(D79;D81)}. A aba já tem uma regra de formatação condicional nesse intervalo que pinta de verde os valores abaixo da meta de E133.
Passo 3: o mapa de calor. O destaque binário (abaixo ou acima da meta) diz pouco sobre o quanto falta. Substitua a regra por uma escala de 3 cores com os limites fixados pelo negócio e as cores invertidas, porque aqui menos dívida é melhor:
Mínimo: Número 0 verde
Ponto médio: Número 4.000.000 amarelo (a meta de E133)
Máximo: Número 6.000.000 vermelho
| Capital \ BNDES | 500 mil | 1 mi | 1,5 mi | 2 mi | 2,5 mi | 3 mi | 3,5 mi | 4 mi |
|---|---|---|---|---|---|---|---|---|
| 5 mi | 5.294.782 | 4.796.126 | 4.297.471 | 3.798.815 | 3.300.159 | 2.801.503 | 2.302.848 | 1.804.192 |
| 6 mi | 4.200.711 | 3.702.056 | 3.203.400 | 2.704.744 | 2.206.088 | 1.707.432 | 1.208.826 | 710.478 |
| 7 mi | 3.106.640 | 2.607.985 | 2.109.329 | 1.610.673 | 1.112.101 | 613.795 | 116.160 | 0 |
| 8 mi | 2.012.569 | 1.513.914 | 1.015.377 | 517.112 | 19.643 | 0 | 0 | 0 |
| 9 mi | 918.653 | 420.456 | 0 | 0 | 0 | 0 | 0 | 0 |
| 10 a 15 mi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Tabela 3.5. Pico da dívida rotativa por capital social e dívida de longo prazo. As linhas de 10 a 15 milhões de capital, todas zeradas, foram agrupadas.
Leitura:
- Zona que exige revolver: 30 das 88 combinações, todas com capital de até 9 milhões. Acima da meta de 4 milhões ficam só quatro, as de capital de 5 milhões com BNDES de até 1,5 milhão e a de 6 milhões com 500 mil.
- A fronteira é uma diagonal. Cada 500 mil de BNDES reduz o pico em cerca de 499 mil; cada milhão de capital, em cerca de 1,09 milhão. Os dois financiamentos quase se substituem, com uma pequena vantagem do capital, que não paga juros. Com 7 milhões de capital, são precisos 4 milhões de BNDES para zerar o revolver; com 8 milhões, 3 milhões bastam.
- A escala fixa importa. Com mínimo e máximo automáticos, o maior valor da tabela (5,3 milhões) ficaria vermelho mesmo que a meta fosse 10 milhões. Com a meta no ponto médio, o amarelo quer dizer "no limite do aceitável".
Desafio extra. Troque a saída do canto para a margem EBITDA anual. A tabela inteira fica constante: capital social e dívida de longo prazo são decisões de financiamento e só afetam o resultado abaixo do EBITDA (despesa e receita financeiras). É uma lição de sensibilidade: antes de montar a tabela, pergunte se a entrada escolhida chega até a saída. Para estudar a margem EBITDA, use drivers operacionais, como o crescimento da receita ou o percentual de CMV. O slide sugere, por exemplo, crescimento da receita × dias de recebíveis sobre o caixa; nessa combinação, a margem EBITDA reage ao crescimento da receita e é indiferente aos dias de recebíveis, que afetam o caixa mas não o resultado.
Exercício 2: simular e ler o risco (aba Monte_Carlo_ex)
Arquivo: EBP_Mod_MonteCarlo_Solver_Markov@2026.xlsx, aba Monte_Carlo_ex.
Tarefa: construir a fórmula MATRIZALEATÓRIA + INV.NORM.N com 1.000 cenários, ligar o spill ao cálculo de resultado operacional do case, calcular P5, P95 e a probabilidade de prejuízo e montar o histograma com FREQUÊNCIA despejada e um gráfico de colunas. Desafio: comparar 100 e 10.000 cenários.
A coluna C traz a projeção base; a coluna D, o desvio padrão histórico de cada premissa cinza; a linha 5, a partir de F, recebe as projeções. Vamos simular todas as premissas que têm desvio, como foi feito em aula nas duas turmas, e analisar o lucro líquido antes de dividendos (linha 58).
Passo 1: o número de projeções e o cabeçalho. Em C4, digite 1000 (com o rótulo "Nº de projeções" em B4). Em F5:
F5: ="Projeção "&TEXTO(SEQUÊNCIA(1;$C$4);"#.##0")
A SEQUÊNCIA despeja 1, 2, 3... até 1.000 para a direita; o TEXTO põe o separador de milhar, para a última aparecer como "Projeção 1.000".
Passo 2: as premissas aleatórias. Em cada linha com premissa cinza (13 linhas: 6, 9, 14, 22, 26, 28, 32, 35, 37, 43, 49, 56 e 62), na coluna F:
F6: =INV.NORM.N(MATRIZALEATÓRIA(1;$C$4);$C6;$D6)
F9: =INV.NORM.N(MATRIZALEATÓRIA(1;$C$4);$C9;$D9)
... (a mesma fórmula, copiada para as outras 11 linhas)
O (1;$C$4) gera uma linha com 1.000 colunas, porque na aba as projeções correm para a direita. O $ em C e D trava as colunas da média e do desvio; a linha fica livre, então a fórmula copiada de F6 para F9 passa a ler C9 e D9.
Passo 3: as linhas de cálculo com #. As outras 27 linhas repetem a conta da coluna C, mas com referência de despejo:
F8: =F6#*F9# Deduções
F11: =F6#-F8# Receita líquida
F13: =F14#*F11# CMV
F16: =F11#-F13# Lucro bruto
F19: =F22#+F25#+F28#+F31#+F34#+F37# SG&A
F40: =F16#-F19# EBITDA
F52: =F46#-F49# Lucro antes de IR
F58: =F52#-F55# Lucro líquido antes de dividendos
F61: =SE(F58#>0;F58#*F62#;0) Dividendos
e assim por diante, inclusive as linhas de percentual (F17: =F16#/F11#). O professor alertou para o ponto que mais gera erro: toda linha precisa de # ou de MATRIZALEATÓRIA. Uma linha esquecida com =F19/F11 calcula só a primeira projeção e deixa as outras 999 em branco, ou com erro mais abaixo. Confira percorrendo a coluna G: toda célula preenchida deve mostrar a fórmula fantasma, em cinza.
Repare em dois detalhes do case. Depreciação, IR e % de distribuição têm desvios minúsculos (3 sobre 30.000; 0,0034 ponto percentual sobre 34%), e por isso quase não variam entre as projeções. E o IR é LAIR × alíquota sem SE: quando o lucro antes de IR é negativo, o IR também fica negativo (Projeção 1.000: −7.390), como um crédito fiscal. É uma simplificação do case; o modelo completo do Capítulo 2 zera o IR no prejuízo.
Passo 4: ler o risco. Abaixo de "Análise", na linha 69:
C72: =MÉDIA(F58#)
C73: =MÍNIMO(F58#)
C74: =MÁXIMO(F58#)
C75: =PERCENTIL(F58#;0,05)
C76: =PERCENTIL(F58#;0,95)
C77: =CONT.SES(F58#;"<0")/CONT.VALORES(F58#)
| Estatística | Rodada de referência (1.000) | Referência com 2 milhões de projeções |
|---|---|---|
| Média | 53.731 | 55.377 |
| P5 | −94.149 | −90.496 |
| P95 | 194.922 | 203.133 |
| Probabilidade de prejuízo | 26,6% | 26,9% |
Tabela 3.6. Lucro líquido antes de dividendos simulado, em US$ mil. A primeira coluna é a rodada mostrada nas telas; a segunda, uma simulação muito maior, feita fora do Excel, que indica para onde as estatísticas convergem. A projeção base, sem incerteza, dava 55.384.
Leitura: o lucro esperado é praticamente o da projeção base, mas a faixa é larga. Em 5% dos cenários, o prejuízo passa de 90 mil; em 5%, o lucro passa de 200 mil. E a chance de fechar o ano no prejuízo é de cerca de 27%, mais de uma em quatro, um número que a projeção base, com seu lucro de 55 mil, escondia. Em aula, as duas turmas chegaram à mesma faixa, entre 25% e 27%.
Passo 5: o histograma. Defina início, passo e número de faixas e deixe as fórmulas fazerem o resto:
C79: -250000 C80: 50000 C81: 13
B84: =SEQUÊNCIA(C81;1;C79;C80) → limites de -250.000 a 350.000
C84: =FREQUÊNCIA(F58#;B84#) → 14 contagens (a última: acima de 350.000)
D84: =C84#/SOMA(C84#) → % de cada faixa
E84: =SOMA($D$84:D84) → % acumulado (copiado até E97)
Selecione as faixas e as frequências e insira um gráfico de colunas. Para rótulos de faixa legíveis, uma coluna auxiliar com =TEXTO(limite_anterior;"#.##0")&" a "&TEXTO(limite;"#.##0") resolve.
O acumulado também pode ser despejado: =SCAN(0;D84#;LAMBDA(acc;x;acc+x)) percorre a coluna de percentuais somando um a um. É a mesma família de LAMBDA vista nos Capítulos 1 e 2.
Em aula, o professor colocou a frequência e o percentual acumulado no mesmo gráfico, com o acumulado num eixo secundário (gráfico de combinação). O resultado ficou confuso, com a linha invertida em relação às colunas. A apostila prefere separar: colunas para a frequência e, se precisar, um segundo gráfico de linha para o acumulado, ou o acumulado como rótulo de dados.
Desafio extra: 100 × 10.000 cenários. Troque C4 para 100 e depois para 10.000 e aperte F9 várias vezes, de olho na probabilidade de prejuízo.
- Com 100, a estatística "dança" muito: numa rodada deu 24%, noutra pode dar 33%. Em 200 rodadas de teste, 95% delas ficaram entre 19% e 36%.
- Com 1.000, a faixa estreita para 23,8% a 29,7%.
- Com 10.000, para 26,0% a 27,7%. O gráfico quase para de mexer.
O tempo de cálculo cresce na mesma proporção, mas com a fórmula despejada continua rápido. O limite prático da aba é de colunas: o Excel tem 16.384, e como as projeções começam em F, cabem no máximo 16.379. Para mais, transponha o modelo e faça uma projeção por linha, com MATRIZALEATÓRIA($C$4;1), como no slide.
De volta ao negócio. Os 27% de chance de prejuízo incomodam? O modelo diz onde agir: reduzir a incerteza de cada linha é tão útil quanto melhorar a média. Na simulação de referência, a receita sozinha (com todas as outras premissas fixas) já daria 23,8% de chance de prejuízo; todas as outras juntas, sem a incerteza da receita, dariam 10,1%. Melhorar a previsão de receita, portanto, pesa mais do que qualquer outra ação isolada. O professor testou em aula um banco de horas que reduz o desvio da folha fixa de 56.000 para 5.600: a chance de prejuízo cai para cerca de 24,9%. Ajuda, mas não resolve sozinho; combinado com renegociar aluguéis, controlar o marketing e ganhar margem no CMV, o risco cai mais.
Em aula, o professor pediu ao Copilot (incluído no Excel 365) para corrigir o gráfico do histograma. A IA resolveu inserindo uma fórmula auxiliar escondida, em vez de ajustar a configuração do gráfico. Use assistentes para destravar, mas confira o que eles fizeram na planilha: uma fórmula nova num canto do modelo é uma alteração que alguém precisa conhecer.
- Atingir Meta altera uma entrada até uma saída bater um alvo. Encontra uma solução, não a solução; não aceita restrições nem várias entradas (para isso, o Solver do Capítulo 4) e sobrescreve a premissa se você confirmar.
- Tabela de Dados de 1 variável: valores em coluna, saídas na linha de cima, entrada da coluna. De 2 variáveis: saída no canto, entrada da linha recebe a primeira linha e entrada da coluna, a primeira coluna.
- A fórmula de referência aponta para a célula de resultado do modelo. As entradas precisam estar na mesma aba. Em modelos grandes, use "Automático, exceto para tabelas de dados" e F9.
- Mapa de calor: escala de cor sobre os resultados, com mínimo, ponto médio e máximo fixados pelo negócio (zero, meta, teto). Inverta as cores quando menor for melhor.
- Cenários nomeados mudam várias premissas de forma coerente; a Tabela de Dados varre 1 ou 2 drivers mantendo o resto fixo.
- Monte Carlo trata premissas como incertas. Normal:
INV.NORM.N(ALEATÓRIO();média;desvio). Uniforme: ALEATÓRIO ou ALEATÓRIOENTRE. Discreta: PROCX com correspondência-1sobre a probabilidade acumulada. - O motor moderno é uma fórmula por linha:
INV.NORM.N(MATRIZALEATÓRIA(1;$C$4);$C6;$D6)nas premissas e#em todas as contas. Mudar o número de projeções é trocar uma célula. - MATRIZALEATÓRIA é volátil: cálculo manual na construção, F9 para girar a roleta e colar valores quando a análise fechar.
- Leia o risco com média, P5, P95,
CONT.SES(spill;"<0")/CONT.VALORES(spill)e histograma comFREQUÊNCIA(spill;limites). Se a resposta dança muito entre F9, aumente o número de projeções.
3.9Exercícios propostos
Use a aba Monte_Carlo_ex (projeção base na coluna C) nos itens 1, 2, 5, 6 e 8, o modelo de quatro premissas do Exemplo 3.1 no item 3 e a Tabela 3.5 no item 4.
- Com Atingir Meta, descubra a receita bruta que leva o lucro líquido antes de dividendos (C58) a 100.000.
- Mantendo a receita de 1.350.000, qual percentual de CMV (C14) zera o lucro antes de IR?
- No modelo do Exemplo 3.1, com volume fixo em 500, que preço leva o EBITDA a 1.000.000?
- Na Tabela 3.5: (a) quantas combinações exigem algum revolver? (b) com 7 milhões de capital, qual a menor dívida de longo prazo testada que zera o revolver? (c) e com 8 milhões?
- Monte uma Tabela de Dados de 1 variável com a receita bruta de 1.100.000 a 1.600.000 e o lucro líquido após dividendos (C64) como saída. Por que, nas duas primeiras linhas, ele é igual ao lucro antes de dividendos?
- Qual o valor de receita bruta que só 10% dos cenários ficam abaixo, segundo a média e o desvio da aba? Escreva a fórmula.
- Na tabela de demanda do Exemplo 3.8, que categoria sai para os sorteios 0,30, 0,79 e 0,80?
- Com C4 = 10.000, até que coluna vai o despejo de F6? Qual o número máximo de projeções que cabe na aba, com as projeções começando em F?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 2 · Modelagem · Capítulo 4
Otimização, Markov e case final
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →Os três capítulos anteriores construíram o modelo e o testaram contra a incerteza. Atingir Meta respondeu "que entrada dá esse resultado?", a Tabela de Dados mostrou como a saída reage a uma ou duas premissas e o Monte Carlo transformou incerteza em probabilidade. Este capítulo fecha o módulo com duas perguntas novas e um case. A primeira pergunta é de otimização: qual é o melhor resultado possível, respeitando as regras do negócio? Quem responde é o Solver. A segunda é de longo prazo: para onde um sistema vai se as regras de transição não mudarem? Quem responde é a cadeia de Markov, que no Excel moderno cabe numa fórmula despejada.
No fim, o case P&J junta tudo o que o módulo ensinou numa análise comercial de verdade: uma base de 50 mil vendas, uma pergunta de negócio, uma ferramenta de reunião e um gráfico para o gestor. O capítulo termina com o mapa que organiza o módulo inteiro: qual ferramenta usar para qual pergunta.
- Formular um problema de otimização: função objetivo, variáveis de decisão e restrições.
- Ativar o Solver, configurar a janela de parâmetros, escolher o método e ler o resultado com senso crítico.
- Reconhecer as armadilhas do Solver: restrição faltando, "≤" no lugar de "=", erro na célula objetivo e ótimo local.
- Ler uma matriz de transição e projetar estados com MATRIZ.MULT despejado, sem a antiga fórmula Ctrl+Shift+Enter.
- Identificar o estado estacionário de uma cadeia de Markov e diferenciar estado absorvente de equilíbrio entre estados.
- Resolver o case P&J: potencial de receita por produto e cliente, simulador cliente × empresa e consolidação para apresentação.
- Escolher a ferramenta do módulo adequada a cada pergunta de negócio.
4.1Formulando um problema de otimização
Todo problema de otimização tem as mesmas três peças. Antes de abrir qualquer janela do Excel, escreva as três em português, numa folha de papel ou num comentário da planilha. Se uma delas não fica clara, o Solver não vai resolver o problema por você: vai resolver outro problema.
| Elemento | Pergunta que responde | No exemplo da carteira |
|---|---|---|
| Função objetivo | O que eu quero maximizar ou minimizar? | Retorno, risco ou retorno ÷ risco da carteira |
| Variáveis de decisão | O que eu posso mudar para chegar lá? | O % do dinheiro aplicado em cada um dos 10 ativos |
| Restrições | O que não pode ser violado? | Investir exatamente 100%, nada negativo, no mínimo 6 ativos com pelo menos 2% |
Tabela 4.1. As três peças de um problema de otimização.
A célula que mede o que você quer melhorar. Ela precisa conter uma fórmula que dependa, direta ou indiretamente, das variáveis de decisão. Se a célula for um número digitado, mudar as variáveis não muda nada, e o Solver não tem o que perseguir.
As células que o Solver pode alterar. São entradas digitadas, nunca fórmulas: se você entregar ao Solver uma célula com fórmula, ele a sobrescreve com um número e a fórmula se perde.
As regras que a solução precisa respeitar: limites físicos (capacidade, orçamento), regras de negócio (diversificação mínima) e limites lógicos (não negatividade). Cada restrição compara uma célula do modelo com um valor ou com outra célula: <=, =, >=, inteiro ou binário.
O Solver é o primo mais capaz do Atingir Meta, visto no Capítulo 3. O Atingir Meta muda uma célula para levar outra a um valor exato, sem restrições. O Solver muda várias células, aceita restrições e, além de "igualar a um valor", sabe maximizar ou minimizar. Quando o problema cabe no Atingir Meta, use o Atingir Meta, que é mais simples; quando há mais de uma alavanca ou alguma regra que não pode ser quebrada, é hora do Solver.
Situação: um fundo de ações tem o histórico de 33 meses de retorno de 10 ativos (jan/2016 a set/2018). O gestor quer montar uma carteira com pelo menos 6 ativos, e um ativo só conta como "na carteira" se receber pelo menos 2% do dinheiro (não vale aplicar R$ 1 só para dizer que diversificou).
- Variáveis: N10:W10, o % aplicado em cada ativo. As linhas 11 a 42 repetem a linha 10 (
=N10,=N11...), porque a composição é definida uma vez e mantida no período todo. - Contas que dependem das variáveis: X10 soma a alocação (
=SOMA(N10:W10)); Y10 conta os ativos acima do mínimo; AA10:AA42 calculam o retorno da carteira em cada mês com=SOMARPRODUTO(C10:L10;N10:W10)(SUMPRODUCT); AA44 é a média desses retornos e AA45 o desvio-padrão. - Objetivo: maximizar AA44 (retorno), minimizar AA45 (risco) ou maximizar uma nova célula AA46 = AA44 ÷ AA45.
- Restrições: N10:W10 ≥ 0; N10:W10 ≤ 1; X10 = 1; Y10 ≥ E5 (o 6 está em E5; o 2% está em E4).
Resultado: o problema está escrito antes de abrir o Solver. Repare que a regra dos 2% não aparece como restrição: ela já está dentro da fórmula de Y10, que conta só os ativos acima de E4. Usar fórmulas auxiliares para simplificar as restrições é uma prática recomendada pelo professor.
Retorno, risco e diversificação
O modelo usa duas medidas clássicas de finanças. O retorno de um ativo é a média dos retornos mensais. O risco é o desvio-padrão desses retornos (=DESVPAD(C10:C42), STDEV): quanto mais o ativo sobe e desce, maior o risco, porque maior a chance de você precisar do dinheiro justamente num mês ruim. Dois investimentos que começam e terminam com o mesmo valor podem ter riscos muito diferentes no caminho.
O retorno de uma carteira é a média ponderada dos retornos dos ativos. O risco não é: ativos que não andam juntos se compensam, e o risco da carteira fica abaixo da média dos riscos. Essa é a ideia da teoria de carteiras de Markowitz, base do "não colocar todos os ovos na mesma cesta". O exemplo clássico usado em aula é uma mineradora exportadora, que ganha quando o dólar sobe, e uma companhia aérea, que tem o combustível em dólar e perde quando ele sobe: juntas na carteira, o efeito do câmbio se anula em boa parte. O risco de mercado, que atinge todo mundo ao mesmo tempo, não se elimina com diversificação.
Situação: em vez de 100% num ativo só, coloque 50% no Ativo 9 e 50% no Ativo 10 (digite 50% em V10 e W10 e zero nos demais).
Retorno: 50% × 9,33% + 50% × 13,76% = 11,55% (exatamente a média)
Risco: 11,70% (a média dos riscos seria (7,33% + 21,51%) ÷ 2 = 14,42%)
Resultado: o retorno fica na média, mas o risco cai para 11,70%, bem abaixo da média de 14,42%. Os dois ativos não sobem e descem nos mesmos meses, e um compensa parte da oscilação do outro. É esse efeito que o Solver vai explorar ao combinar os 10 ativos.
4.2Solver: configurar, rodar e ler o resultado
Ativar o suplemento
O Solver vem com o Excel, mas desligado. Ative uma vez e ele fica disponível em todas as pastas:
- Arquivo › Opções › Suplementos.
- Em Gerenciar, escolha Suplementos do Excel e clique em Ir.
- Marque Solver e dê OK. (Na mesma lista está o Ferramentas de Análise, que traz o histograma estático citado no Capítulo 3.)
O botão aparece em Dados › Análise › Solver, no canto direito da guia. No Mac, o caminho é Ferramentas › Suplementos do Excel.
A janela de parâmetros
- Definir Objetivo: a célula da função objetivo, e o sentido: Máx., Mín. ou Valor de (esta última faz o papel do Atingir Meta, mas com restrições).
- Alterando Células Variáveis: o intervalo das variáveis. Dá para informar vários intervalos separados por ponto e vírgula.
- Sujeito às Restrições: Adicionar abre uma janela com três campos: referência da célula, operador (
<=,=,>=,int,bin,dif) e restrição (um número ou outra célula). Um intervalo inteiro pode receber a mesma regra de uma vez, como$N$10:$W$10 >= 0. - Tornar Variáveis Irrestritas Não Negativas: a caixa equivale a colocar "≥ 0" em todas as variáveis. Mesmo com ela marcada, vale escrever a restrição explicitamente, para que a regra fique visível a quem abrir o modelo.
- Selecionar um Método de Solução: veja a Tabela 4.2.
- Carregar/Salvar: guarda a configuração em células da planilha, útil para alternar entre cenários de otimização. O Solver também salva a última configuração de cada aba junto com o arquivo.
| Método | Quando usar | Exemplo |
|---|---|---|
| LP Simplex | Objetivo e restrições são combinações lineares das variáveis (somas de variável × constante) | Mix de produção com margem por unidade e capacidade por máquina |
| GRG Não Linear | Há termos não lineares, mas "suaves" (sem saltos) | Risco de carteira, que depende do quadrado dos pesos |
| Evolutionary | O modelo tem saltos: SE, CONT.SES, PROCX, arredondamentos | Regras do tipo "conta só se passar de 2%" |
Tabela 4.2. Métodos do Solver. O padrão do curso é o GRG Não Linear; o Simplex dá a resposta exata e mais rápida, mas só quando o problema é linear.
A célula Y10 usa CONT.SES, uma função com salto: o ativo conta ou não conta. O GRG Não Linear trabalha com inclinações e se confunde com saltos, e é por isso que ele às vezes demora, pede para continuar ou para numa solução que não é a melhor (Exemplo 4.4). O curso usa o GRG por ser o padrão. Em problemas pequenos como este, o método Evolutionary ou a opção Usar Multistart (em Opções › GRG Não Linear) costumam chegar mais perto do melhor resultado, ao custo de mais tempo.
Ler o resultado com senso crítico
Ao terminar, o Solver mostra a janela Resultados do Solver com uma mensagem ("O Solver encontrou uma solução. Todas as restrições e condições de otimização foram atendidas", ou o motivo de não ter encontrado). Ali você escolhe Manter Solução do Solver ou Restaurar Valores Originais e pode marcar relatórios, que o Excel cria em abas novas:
- Relatório de Resposta: os valores finais do objetivo e das variáveis e, para cada restrição, se ela ficou Associada (no limite, apertando a solução) ou Não Associada (com folga).
- Relatório de Sensibilidade: quanto o objetivo melhoraria se cada restrição fosse afrouxada em uma unidade. No Simplex esse número se chama preço-sombra; no GRG aparece como multiplicador de Lagrange. Restrição com folga tem preço zero: afrouxá-la não muda nada.
O Solver resolve o problema que você escreveu, não o que você quis dizer. Antes de aceitar a resposta, confira: a soma das alocações dá 100%? Algum peso ficou negativo? O número de ativos respeita a regra? O retorno é plausível para o histórico? Um resultado bom demais quase sempre é uma restrição esquecida.
Situação: o professor configurou só duas restrições, N10:W10 >= 0 e N10:W10 <= 1, e mandou maximizar o retorno médio (AA44).
Resultado do Solver: 100% em cada ativo, menos o Ativo 1 (o único com retorno negativo). Total aplicado: 900% do dinheiro, para um retorno de 58,24% ao mês.
Leitura: cada peso individual está entre 0% e 100%, então as duas restrições foram cumpridas. Faltou dizer que a soma precisa ser 100% (X10 = 1) e que a carteira precisa ter pelo menos 6 ativos (Y10 >= E5). Com as quatro restrições, a resposta passa a ser uma carteira de verdade.
Com X10 <= 1, a restrição parece certa, mas abre uma porta: para minimizar o risco, o Solver descobre que a forma mais fácil de reduzir a oscilação é não investir parte do dinheiro. Em aula, uma rodada assim terminou com 60% do dinheiro aplicado e outra com 95%. Se a regra do negócio é investir tudo, a restrição é X10 = 1.
Se a célula objetivo der erro em algum teste, o Solver para. Isso aconteceu em aula com a razão =AA44/AA45: partindo de todas as variáveis zeradas, o risco é zero e a divisão dá #DIV/0!. A correção é tratar o erro: =SEERRO(AA44/AA45;0) (IFERROR). Tratar erro, aqui, não é estética: é o que deixa o Solver rodar.
A fórmula do arquivo é =CONT.SES($N$10:$W$10;">"&$E$4). Ela só conta ativos com mais de 2%. Se o Solver colocar exatamente 2,00% num ativo (e ele adora parar exatamente no limite), esse ativo não conta, e a restrição de 6 ativos parece violada. Em aula, uma rodada mostrou "6 ativos" com dez pesos positivos, vários deles cravados em 2,00%. Se a regra do negócio é "pelo menos 2%", troque o operador: =CONT.SES($N$10:$W$10;">="&$E$4). Os resultados deste capítulo usam essa versão.
O ponto de partida importa
O GRG começa nos valores que estão nas variáveis e vai ajustando aos poucos, na direção que melhora o objetivo. Quando chega a um ponto em que qualquer pequena mudança piora o resultado, para. Esse ponto é um ótimo local: o melhor da vizinhança, não necessariamente o melhor de todos (o ótimo global). Pense em subir uma montanha no nevoeiro: você para quando todos os passos em volta descem, mas pode estar num morro ao lado do pico.
Situação: maximizar o retorno (AA44) com as quatro restrições do Exemplo 4.1.
- Em aula, partindo de pontos diferentes (tudo zero, tudo 100%, 10% em cada), o GRG parou em carteiras com retorno perto de 10% ao mês e risco perto de 7%, com pequenas diferenças de uma rodada para outra.
- A melhor carteira possível, porém, rende 13,12%: 90% no Ativo 10 e o mínimo de 2% em cinco ativos (4, 5, 6, 8 e 9), só para cumprir a regra dos 6 ativos. Risco: 19,31%.
Leitura: o problema tem uma solução muito melhor que a encontrada. Rodar o Solver de vários pontos de partida e comparar é obrigatório em problemas não lineares; chegar sempre ao mesmo lugar aumenta a confiança, mas não garante que é o melhor. Repare também que o ótimo de retorno é uma carteira quase toda num ativo só: maximizar retorno sem olhar risco raramente é o objetivo certo.
O Solver resolve bem problemas com dezenas de variáveis. Roteirizar milhares de caminhões ou escalar milhares de funcionários pede ferramentas de otimização fora do Excel. Para decisões do dia a dia de um analista (mix de produtos, alocação de verba, composição de carteira, escala de uma equipe pequena), ele dá conta.
4.3Cadeias de Markov
Uma cadeia de Markov descreve um sistema que, a cada período, está em um de alguns estados possíveis e pode passar para outro com probabilidades conhecidas. Exemplos: o cargo de um funcionário (estagiário, analista, coordenador, gerente, desligado); a faixa de atraso de uma conta a receber (em dia, até 30 dias, 30 a 60, acima de 90, perdida, paga); o perfil de um cliente (inativo, ocasional, frequente, assinante); a situação de saúde de um paciente.
A probabilidade de ir para o próximo estado depende só do estado atual, não do caminho que trouxe o sistema até ele. Um analista tem a mesma chance de promoção tenha ele sido estagiário ou não. É a mesma lógica da moeda honesta: depois de dez caras seguidas, a chance de cara no próximo lançamento continua 50%. Quando essa hipótese é razoável, a cadeia de Markov é uma boa ferramenta.
Tabela quadrada com um estado por linha e por coluna. A célula na linha i e coluna j é a probabilidade de quem está no estado i hoje estar no estado j no próximo período. Cada linha soma 100%: quem está num estado precisa ir para algum lugar, inclusive ficar onde está.
O mesmo conteúdo pode ser desenhado como um diagrama de transição: um círculo por estado e uma seta para cada probabilidade diferente de zero. As setas que voltam para o próprio estado mostram quem fica.
Situação: a aba Markov_ex traz, no alto, um diagrama genérico com quatro estados. As setas mostram: Estado 1 vai 80% para o 2 e 20% para o 4; Estado 2 volta 90% para o 1 e fica 10%; Estado 3 vai 70% para o 2 e fica 30%; Estado 4 vai 50% para o 2 e 50% para o 3.
| De \ Para | Estado 1 | Estado 2 | Estado 3 | Estado 4 | Soma |
|---|---|---|---|---|---|
| Estado 1 | 0% | 80% | 0% | 20% | 100% |
| Estado 2 | 90% | 10% | 0% | 0% | 100% |
| Estado 3 | 0% | 70% | 30% | 0% | 100% |
| Estado 4 | 0% | 50% | 50% | 0% | 100% |
Resultado: a matriz é o diagrama em forma de tabela. A coluna de soma é o primeiro teste de qualquer matriz de transição: se uma linha não fecha 100%, há seta faltando ou probabilidade digitada errada. No arquivo, a última coluna da matriz do exercício já vem com =1-SOMA(...), que fecha a linha automaticamente.
O case do medicamento
O exercício da aula usa quatro estados de saúde de uma população: Saudável, Doente, Em tratamento e Óbito. Uma farmacêutica quer saber quanto uma melhora no medicamento estende a vida da população e, com isso, se vale a pena investir em mais uma rodada de desenvolvimento.
| De \ Para | Saudável | Doente | Em tratamento | Óbito |
|---|---|---|---|---|
| Saudável | 70% | 30% | 0% | 0% |
| Doente | 5% | 40% | 30% | 25% |
| Em tratamento | 20% × (1 + melhora) | 20% | 50% | 1 − soma |
| Óbito | 0% | 0% | 0% | 100% |
Tabela 4.3. Matriz de transição do case do medicamento. Hoje, 20% de quem está em tratamento fica saudável; cada ponto de melhora sai do óbito. A melhora vai de 0% a 50% (no limite, 30% ficam saudáveis e ninguém em tratamento morre).
Estado do qual não se sai: a probabilidade de permanecer é 100%. No case, Óbito. Se todos os outros estados levam, direta ou indiretamente, a um estado absorvente, com o tempo a população inteira termina nele. A pergunta interessante deixa de ser "para onde vai" e passa a ser "em quanto tempo".
4.4MATRIZ.MULT despejado e o estado estacionário
Para projetar a população um período à frente, cada estado do próximo período recebe a soma do que vem de todos os estados atuais. Saudável no período 2, por exemplo, é: saudáveis que ficam + doentes que se curam + tratados que se curam + óbitos que "voltam" (zero). Escrever isso à mão para cada célula é trabalhoso e fácil de errar nas travas com $; em aula, a primeira tentativa manual saiu com as referências trocadas. A conta é exatamente uma multiplicação de matrizes.
=MATRIZ.MULT(matriz1; matriz2) multiplica duas matrizes. O número de colunas da primeira precisa ser igual ao de linhas da segunda. Com o estado atual em linha (1×4) e a matriz de transição (4×4), o resultado é o estado do próximo período (1×4), que derrama sozinho nas quatro células.
MATRIZ.MULT(estado; matriz) (1×4 vezes 4×4) devolve 1×4. Invertida, MATRIZ.MULT(matriz; estado) (4×4 vezes 1×4) não fecha as dimensões e devolve #VALOR!. Na multiplicação de matrizes, ao contrário da multiplicação de números, a ordem importa.
Em versões antigas do Excel, MATRIZ.MULT exigia uma fórmula de matriz: selecionar antes as quatro células de saída, digitar a fórmula e confirmar com Ctrl+Shift+Enter. O Excel mostrava a fórmula entre chaves, {=MATRIZ.MULT(...)}, e não deixava alterar uma célula do bloco sozinha. No Excel 365 basta escrever a fórmula na primeira célula e teclar Enter: o resultado derrama. Os dois jeitos dão os mesmos números; se você receber uma planilha antiga com chaves nas fórmulas, é isso que está vendo.
Situação: no diagrama genérico do Exemplo 4.5, toda a população (100%) começa no Estado 1.
- Monte a matriz do Exemplo 4.5 em células e o vetor inicial numa linha: 100%, 0%, 0%, 0%.
- Na linha de baixo:
=MATRIZ.MULT(vetor_do_período_0; $matriz$), com a matriz travada. - Copie a fórmula para as linhas seguintes. Cada linha usa a linha de cima como estado atual.
Período 1: 0% 80% 0% 20%
Período 2: 72% 18% 10% 0%
Resultado: do período 0 para o 1, os 100% do Estado 1 se dividem em 80% para o 2 e 20% para o 4, exatamente a linha do Estado 1 na matriz. No período 2, os 80% do Estado 2 voltam 90% para o 1 (72%) e ficam 10% (8%); os 20% do Estado 4 vão metade para o 2 (10%) e metade para o 3 (10%). Estado 2: 8% + 10% = 18%.
Estado estacionário
Repetindo a fórmula período após período, a distribuição deixa de mudar. Esse ponto é o estado estacionário (ou equilíbrio): para onde o sistema converge se as regras de transição não mudarem. Markov não pergunta o que acontece amanhã; pergunta onde o sistema termina.
Situação: continue a tabela do Exemplo 4.6 por 40 períodos e observe.
| Período | Estado 1 | Estado 2 | Estado 3 | Estado 4 |
|---|---|---|---|---|
| 1 | 0,00% | 80,00% | 0,00% | 20,00% |
| 2 | 72,00% | 18,00% | 10,00% | 0,00% |
| 10 | 44,89% | 41,71% | 6,32% | 7,08% |
| 28 em diante | 40,75% | 45,28% | 5,82% | 8,15% |
Resultado: a partir do período 28, nenhum estado muda mais na segunda casa decimal: o estado estacionário é 40,75%, 45,28%, 5,82% e 8,15%. Agora troque o ponto de partida, colocando 100% no Estado 4 (ou 25% em cada): o começo da trajetória muda, mas o equilíbrio é o mesmo. Quando todos os estados se comunicam, o estado estacionário não depende de onde o sistema começa.
O professor cita três usos. Folha de pagamento: estados de cargo e uma entrada de contratações para projetar quantas pessoas haverá em cada nível e quanto isso custa. Segmentação de clientes: estados de frequência de compra para estimar o valor de um cliente ao longo do tempo e quanto vale gastar para movê-lo de faixa; como o equilíbrio não depende do ponto de partida, a alavanca está em mudar as probabilidades, não em onde o cliente entra. Busca na internet: a primeira versão do algoritmo do Google tratava cada página como um estado e os cliques como transições; as páginas com mais "fluxo" no equilíbrio eram as mais relevantes.
No case do medicamento, o estado estacionário é trivial: 100% em Óbito. O que interessa é a velocidade. Com estado absorvente, a pergunta vira "em que período a população toda chegou lá?", e a resposta exige um critério, a precisão: considera-se que todos morreram quando falta menos de uma pessoa (precisão 1) para os 1.000, ou seja, quando os óbitos passam de 999. A resolução completa está no Exercício 2 da Seção 4.8.
Em aula, o professor fez um teste hipotético: e se uma fração do estado Óbito voltasse para Saudável? Óbito deixa de ser absorvente e aparece um equilíbrio de verdade entre os quatro estados. Com a melhora de 50% e 5% de retorno, o sistema se equilibra em 195 saudáveis, 122 doentes, 73 em tratamento e 610 óbitos (de 1.000); com 10% de retorno, em 281, 175, 105 e 439. O equilíbrio também chega bem mais rápido do que a absorção total. O teste não tem sentido biológico, mas mostra uma regra útil: a estrutura da matriz (quem se comunica com quem) define o tipo de resposta.
4.5Qual ferramenta para qual pergunta
O módulo apresentou cinco ferramentas de análise. Elas não competem: cada uma responde a um tipo de pergunta. Saber qual pergunta você tem é a maior parte do trabalho de modelagem.
Uma forma de organizar a escolha é voltar à distinção do Capítulo 1 entre modelo determinístico e estocástico. Atingir Meta, Tabela de Dados e Solver trabalham com premissas fixas e perguntam "e se?" ou "qual o melhor?". Monte Carlo assume que as premissas são incertas e devolve uma distribuição. Markov trabalha com probabilidades de transição e olha o longo prazo.
Situação: para cada pergunta de um diretor, qual ferramenta do módulo responde?
| Pergunta | Ferramenta | Por quê |
|---|---|---|
| "Quanto precisamos vender para o EBITDA chegar a R$ 1 milhão?" | Atingir Meta | Uma entrada, uma meta exata |
| "Como o valuation muda com WACC de 10% a 14% e crescimento de 2% a 5%?" | Tabela de Dados + mapa de calor | Duas entradas, grade de cenários |
| "Qual a chance de fecharmos o ano no prejuízo?" | Monte Carlo | Premissas incertas, resposta em probabilidade |
| "Como dividir a verba de marketing entre 5 canais para maximizar vendas, com no máximo 40% por canal?" | Solver | Várias variáveis, objetivo e restrições |
| "Daqui a alguns anos, quantos clientes estarão em cada faixa de frequência?" | Markov | Estados, transições e longo prazo |
Resultado: a palavra-chave costuma entregar a ferramenta: "quanto precisa para" (Atingir Meta), "como varia" (Tabela de Dados), "qual a chance" (Monte Carlo), "qual o melhor" (Solver), "para onde vai" (Markov).
4.6Case integrador: potencial comercial da P&J
O case final aplica o módulo inteiro sobre um problema de negócio. A P&J, fabricante de bens de consumo, enfrenta margens em queda e um mercado mais competitivo. Você é associate da consultoria Brain&Company e recebeu do diretor financeiro a base com todas as vendas do ano, por produto e cliente.
O diagnóstico
A área de pricing define um preço base por produto: o mínimo pelo qual o vendedor pode vender. Ele cobre o custo do produto, um rateio das despesas de estrutura e uma margem que remunera o capital investido. O sistema bloqueia vendas abaixo do preço base, e esse é o único controle. Os vendedores são comissionados sobre o que vendem, então fechar a venda perto do preço base é melhor do que perder a venda. O incentivo do vendedor (não perder nenhuma venda) não é o da empresa (vender pelo maior preço que o cliente aceita). Cada cliente é atendido por um vendedor específico, e o poder de negociação depende muito do produto: uma marca líder, que o varejista não pode deixar de ter na gôndola, sustenta preço; um produto sem diferencial, não.
Quanto o vendedor conseguiu cobrar acima do preço base, num ano, para um produto e um cliente: Receita Cliente ÷ Receita Base − 1. Receita base é preço base × quantidade; receita cliente é o preço efetivamente cobrado × quantidade.
Margem padrão de um produto é a média simples das margens adicionais de todos os clientes que o compraram. Potencial adicional é quanto a mais de receita entraria se cada cliente abaixo da margem padrão pagasse exatamente a margem padrão: Receita Base × (1 + Margem padrão) − Receita Cliente. Para quem já paga acima da média, o potencial é zero.
O case pede duas entregas: o potencial total (a soma de todos os potenciais adicionais, calculados com valores anuais por produto e cliente, não transação a transação) e uma ferramenta com dois gráficos que compare as vendas mensais de um cliente escolhido com as vendas totais da empresa (receita e volume), para usar em reunião com o presidente e o diretor comercial. A planilha acrescenta uma terceira etapa, a consolidação por cliente para apresentação.
Situação: produto 100100, vendido para 19 clientes. Somando as vendas do ano na base:
Amazon: Receita Base = 10.969.800,00 Receita Cliente = 14.564.730,00
Margem adicional = 14.564.730 ÷ 10.969.800 − 1 = 32,8%
Margem padrão do produto (média simples dos 19 clientes) = 48,6%
Potencial = 10.969.800 × (1 + 48,6%) − 14.564.730 = 1.733.470
Resultado: se a Amazon pagasse a margem média do produto, a P&J faturaria mais R$ 1,73 milhão por ano só nesse item. A conta equivale a (48,6% − 32,8%) × receita base. No produto 100100, 10 dos 19 clientes estão abaixo da média, e o potencial do produto soma R$ 6,62 milhões.
A aba Exemplo_Analise1 mostra a análise do produto 100100 com valores digitados, não fórmulas, e ela tem 20 linhas, com o cliente Mais Barato duas vezes. Refazendo a conta a partir da Base, o produto tem 19 clientes, a margem padrão é 48,6% (no exemplo, 48,2%) e o potencial é R$ 6,62 milhões (no exemplo, R$ 6,08 milhões). A lição vale para qualquer modelo: um exemplo estático serve para mostrar o formato, não como gabarito de números. Refaça a conta com fórmulas ligadas à base.
O PDF ilustra a conta com um cliente que pagou 15% acima da base, com receita anual de R$ 15 milhões, num produto de margem média de 30%, e diz que o valor adicionado seria de mais R$ 15 milhões. Pela definição do próprio case, a receita base desse cliente é 15 ÷ 1,15 = R$ 13,04 milhões, e a receita com 30% seria 13,04 × 1,30 = R$ 16,96 milhões: o valor adicionado é R$ 1,96 milhão, não R$ 15 milhões. Use a fórmula, não o número do exemplo.
Os três checkpoints
O case é conduzido de forma semiautônoma, com três paradas para conferir o avanço:
- Consolidação da análise (aba Exemplo_Analise1): a tabela de produto × cliente com margem adicional, margem padrão e potencial, para todos os 150 produtos, e o potencial total.
- Simulador (aba Exemplo_Analise2): um menu suspenso com o cliente e quatro linhas mensais (quantidade do cliente, quantidade total, receita do cliente, receita total) que alimentam dois gráficos já prontos na aba.
- Gráfico final (aba UltimoGrafico): receita anual, potencial adicional e margem por cliente, num gráfico de apresentação com duas ou três frases de recomendação.
Os slides descrevem o segundo checkpoint como um simulador de desconto e volume e o primeiro com classificação por faixa de potencial. A planilha e o texto do case pedem o comparativo cliente × empresa, e é isso que a Seção 4.8 resolve; o simulador de desconto fica como desafio nos exercícios propostos.
Os gráficos prontos da aba Exemplo_Analise2 combinam colunas (total) e linha (cliente) com eixo secundário, porque o total é cerca de 20 vezes o cliente. O recurso funciona, mas as séries se sobrepõem e o leitor pode comparar alturas que não são comparáveis. O professor sugere duas melhorias: ajustar a escala dos eixos para as séries não se cruzarem ou, melhor, mostrar a participação do cliente no total (=C9#/C10# ao lado da tabela), uma grandeza só, em %. A Figura 4.7 usa a segunda opção.
4.7Fechamento do módulo
O modelo completo do Capítulo 2 (capital de giro, dívida com revolver, impostos e dividendos) segue o mesmo padrão usado em FP&A e valuation no mercado. Os Capítulos 3 e 4 deram a ele as ferramentas de teste: sensibilidade, simulação, otimização e longo prazo. Um próximo passo natural é combinar Monte Carlo com o modelo completo, para simular caixa e valuation sob incerteza.
O bloco final do curso trata de automação: Power Query para trazer e tratar dados, VBA para transformar rotinas em um botão e IA para análise de dados. A distinção entre determinístico e estocástico volta ali para decidir a ferramenta: uma rotina que precisa dar sempre o mesmo resultado vai para fórmula, Power Query ou VBA; uma tarefa pontual e exploratória pode ir para a IA.
No terceiro checkpoint, o professor montou um gráfico de bolhas (receita no eixo X, potencial no Y, margem no tamanho da bolha). Para cada cliente aparecer com nome e cor, é preciso adicionar as 19 séries uma a uma em Selecionar Dados, um trabalho manual e propenso a erro. Em aula, ele pediu a um assistente de IA no Excel que populasse as séries, e o assistente trocou os eixos na primeira tentativa. A regra que ele tira disso: tarefa de uma vez só pode ir para a IA, conferindo o resultado; tarefa que se repete toda semana vai para um código VBA, que faz sempre o mesmo, sem custo de assinatura e para qualquer usuário. Peça também à IA que explique a fórmula que ela propôs antes de usá-la.
4.8Exercícios resolvidos
Os exercícios 1 e 2 usam o arquivo EBP_Mod_MonteCarlo_Solver_Markov@2026.xlsx (abas Solver_ex e Markov_ex; a aba Monte_Carlo_ex é do Capítulo 3). O exercício 3 usa o arquivo do case P&J (EBP_Mod_PJ@2025). Os slides citam os arquivos com outros nomes (EBP_Mod_Simulacao_2026_Aluno e EBP_Mod_PJ_2026_Aluno); o conteúdo é o mesmo.
Exercício 1: carteira ótima com o Solver (aba Solver_ex)
Tarefa: rodar o Solver com as restrições do problema, validar a plausibilidade do resultado, garantir a não negatividade e testar pontos de partida diferentes. Fazer três otimizações: máximo retorno, mínimo risco e máxima relação retorno ÷ risco.
Preparação. Ajuste Y10 para contar "2% ou mais" (=CONT.SES($N$10:$W$10;">="&$E$4), copiada até Y42) e crie a razão em AA46:
Z46: Retorno / Risco
AA46: =SEERRO(AA44/AA45;0)
Configuração do Solver (Figura 4.2), igual nas três rodadas, mudando só o objetivo:
Variáveis: $N$10:$W$10
Restrições: $N$10:$W$10 <= 1 (no máximo 100% num ativo)
$N$10:$W$10 >= 0 (não negatividade; marque também a caixa)
$X$10 = 1 (investir exatamente 100%)
$Y$10 >= $E$5 (pelo menos 6 ativos com 2% ou mais)
Método: GRG Não Linear
Objetivo: $AA$44 Máx. | $AA$45 Mín. | $AA$46 Máx.
Comece cada rodada com 10% em cada ativo, rode, anote o resultado e rode de novo a partir de outro ponto (por exemplo, a solução anterior, ou 100% num ativo). Guarde a melhor carteira de cada objetivo numa pequena tabela de registro abaixo do modelo, colando os valores (Ctrl+Alt+V › Valores), como o professor fez em aula.
| Objetivo | Composição principal | Retorno | Risco | Ret. ÷ risco |
|---|---|---|---|---|
| Máximo retorno | 90% Ativo 10; 2% nos Ativos 4, 5, 6, 8 e 9 | 13,12% | 19,31% | 0,68 |
| Mínimo risco | 59,44% Ativo 7; 15,87% Ativo 8; 8,90% Ativo 3; 8,16% Ativo 4 | 3,27% | 1,31% | 2,50 |
| Máximo retorno ÷ risco | 45,35% Ativo 7; 18,31% Ativo 8; 10,78% Ativo 4; 10,54% Ativo 3 | 4,36% | 1,50% | 2,91 |
Tabela 4.4. As três carteiras ótimas. Composições completas no No Excel 4.3; pesos arredondados em duas casas, e o Solver pode diferir na segunda casa conforme o ponto de partida.
Leitura e plausibilidade.
- Todas as carteiras somam 100%, nenhum peso é negativo e cada uma tem pelo menos 6 ativos com 2% ou mais. As restrições foram respeitadas.
- Máximo retorno é quase uma aposta num ativo só: põe o mínimo exigido em cinco ativos e o resto no mais rentável. O risco de 19,31% é quase o do Ativo 10 sozinho. É uma resposta correta para a pergunta, mas mostra que "maximizar retorno" sem olhar risco é uma pergunta ruim. Em aula, o GRG parou perto de 10% de retorno nesta rodada (Exemplo 4.4): rode mais de uma vez.
- Mínimo risco concentra no Ativo 7 (o mais estável) e combina ativos que se compensam. O risco de 1,31% é menor que o do ativo menos arriscado sozinho (2,03%): é a diversificação trabalhando.
- Máximo retorno ÷ risco é o equilíbrio entre as duas: retorno 33% maior que o da carteira de mínimo risco (4,36% contra 3,27%) com só 0,19 ponto de risco a mais. Em aula, a primeira rodada chegou a 2,59 e, depois do
SEERROe de um novo ponto de partida, a 2,91, o mesmo valor da Tabela 4.4.
A configuração salva na aba Solver_ex traz duas restrições prontas: Y10 >= E5 e N10:W10 <= 0,4, um teto de 40% por ativo. Em aula, as duas turmas trabalharam com o teto de 100% da Tabela 4.4. Com o teto de 40%, os resultados mudam; o cálculo está no Exercício proposto 1.
Exercício 2: quanto tempo a população sobrevive (aba Markov_ex)
Tarefa: evoluir 1.000 pessoas saudáveis período a período, encontrar em que período todos morrem com o tratamento atual (20% de cura) e com a melhora máxima (30%), e medir o ganho.
Passo 1: parâmetros e matriz. Preencha a área cinza com as probabilidades da Tabela 4.3 e use a precisão 1 (todos morreram quando os óbitos passam de 999). A célula de Em tratamento › Saudável é uma fórmula que lê a melhora:
D39: =D32*(1+D33) → 20,0% com melhora 0%; 30,0% com melhora 50%
G37: =1-SOMA(D37:F37) (copiada até G40: cada linha fecha 100%)
Passo 2: evolução. Monte a tabela em J36:O137 (períodos 0 a 100). Linha 37: período 0, com 1.000 em Saudável e zero nos demais. Da linha 38 em diante:
J38: =J37+1
K38: =MATRIZ.MULT(K37:N37;$D$37:$G$40) → derrama em K38:N38
O38: =SOMA(K38:N38) → 1.000 em todas as linhas (conferência)
Copie J38:O38 para baixo até a linha 137. A coluna Total é o teste do modelo: se não der 1.000 em alguma linha, alguma linha da matriz não soma 100% ou a trava $ está errada.
Passo 3: o período em que todos morrem. Conte quantos períodos ainda têm óbitos até 999 (o total menos a precisão). Como a tabela começa no período 0, a contagem é exatamente o número do primeiro período acima do limite:
D43: =CONT.SES(N37:N137;"<="&$O$37-$D$31) → 59
Em aula, uma das turmas contou a partir do período 1 e chegou a 58, que é o último período com alguém vivo; o período em que todos morreram é 59. A Figura 4.5 mostra as curvas.
Passo 4: o efeito da melhora. Com D33 = 50%, a mesma fórmula devolve 80: a melhora máxima do medicamento dá 21 períodos a mais até a população toda chegar ao óbito. Para ver todos os níveis de melhora de uma vez, monte uma Tabela de Dados de uma entrada (Capítulo 3): os níveis de 0% a 50% em C47:C57, =D43 em D46 e Dados › Teste de Hipóteses › Tabela de Dados, com D33 como célula de entrada da coluna.
O título da aba fala em idade média da população. Uma medida direta é a expectativa de vida de quem começa saudável: a soma das pessoas vivas em todos os períodos, dividida pelas 1.000 iniciais, =SOMA(K37:M137)/O37. O resultado é 10,32 períodos com o tratamento atual e 12,80 com a melhora de 50%. O "período em que todos morrem" mede a cauda da curva; a expectativa mede a média. Para decidir se a nova rodada de desenvolvimento se paga, a farmacêutica compararia o custo dela com o valor desses períodos ganhos.
O arquivo vem com precisão 0,01 (todos morreram quando falta menos de um centésimo de pessoa) e melhora de 20% em D33. Com precisão 0,01 e melhora 0%, a resposta é 97 períodos; com melhora de 5% ou mais, passa de 100 e a tabela de 100 períodos não basta (com 20%, são 110). Em aula, as duas turmas usaram precisão 1. O critério muda o número, não a lógica: escolha a precisão que faz sentido para a pergunta e garanta que a tabela tenha períodos suficientes.
Exercício 3: o case P&J de ponta a ponta
Preparação. Na aba Base, transforme a base em Tabela (Página Inicial › Formatar como Tabela, ou o atalho que o professor usa no Excel em inglês, Ctrl+T) e nomeie como tbl_Vendas em Fórmulas › Gerenciador de Nomes (ou direto no campo Nome da Tabela, na guia Design da Tabela). As colunas de receita já estão calculadas: receita base = preço base × quantidade; receita cliente = preço cliente × quantidade.
Checkpoint 1: consolidação da análise (aba Exemplo_Analise1). O professor mostrou dois caminhos.
O caminho da tabela dinâmica: inserir uma tabela dinâmica com Código_Produto e Cliente nas linhas e as duas receitas nos valores; em Design, escolher Layout do Relatório › Mostrar em Formato de Tabela e Repetir Todos os Rótulos de Itens, e remover subtotais e totais gerais. A margem adicional pode ser um campo calculado. A margem padrão não pode: um campo calculado só enxerga a própria linha, e a média por produto precisa da coluna inteira. Ela fica numa coluna ao lado (=MÉDIASES(...), AVERAGEIFS), assim como o potencial. O problema é a manutenção: se a base mudar, a dinâmica precisa de Atualizar e as colunas ao lado precisam ser estendidas à mão.
O caminho moderno resolve tudo numa fórmula que se atualiza sozinha. Apague os valores digitados do exemplo (inclusive o total em H26, que bloquearia o despejo) e escreva em B6:
=LET(
t; AGRUPARPOR(EMPILHARH(tbl_Vendas[Código_Produto]; tbl_Vendas[Cliente]);
EMPILHARH(tbl_Vendas[Receita_total_Base(R$)];
tbl_Vendas[Receita_total_Cliente(R$)]);
SOMA; 0; 0);
prod; ESCOLHERCOLS(t; 1);
base; ESCOLHERCOLS(t; 3);
cli; ESCOLHERCOLS(t; 4);
marg; cli/base-1;
padr; MAP(prod; LAMBDA(p; MÉDIA(FILTRO(marg; prod=p))));
pot; SE(marg<padr; base*(1+padr)-cli; 0);
EMPILHARH(t; marg; padr; pot))
AGRUPARPOR(GROUPBY) soma as duas receitas por produto e cliente; os dois zeros finais pedem "sem cabeçalho" e "sem totais". O resultado tem 2.850 linhas (150 produtos × 19 clientes), já em ordem de produto e cliente.LETdá nomes a cada pedaço, o que deixa a fórmula legível como um texto.MAPcomLAMBDAcalcula a margem padrão linha a linha: para cada código de produtop, a média das margens das linhas daquele produto. É o que a tabela dinâmica não conseguia fazer. A função foi apresentada em aula com a ajuda de um assistente de IA, que a propôs e depois a explicou.EMPILHARH(HSTACK) junta as colunas no formato da aba.
Em J6, o potencial total: =SOMA(ESCOLHERCOLS(B6#;7)).
Resultado do checkpoint 1: o potencial adicional total é R$ 5.368.259.882,72, cerca de R$ 5,37 bilhões por ano, ou 2,25% da receita atual (R$ 238,5 bilhões). Das 2.850 combinações, 1.407 estão abaixo da margem padrão do produto. Para dar a dimensão, o professor lembra que margens líquidas de 2% são comuns no varejo: 2,25% a mais de receita, sem custo adicional, mudaria o resultado da empresa.
Checkpoint 2: simulador cliente × empresa (aba Exemplo_Analise2). Crie a lista de clientes numa aba auxiliar, com =CLASSIFICAR(ÚNICO(tbl_Vendas[Cliente])), nomeie a célula de origem (por exemplo, LST_Clientes, apontando para =Auxiliar!$B$3#) e use-a como fonte da validação de dados em C4. Depois, uma fórmula por linha:
C7: =SOMASES(tbl_Vendas['#_Venda]; tbl_Vendas[Cliente]; $C$4;
tbl_Vendas[Mês]; SEQUÊNCIA(1;12))/1000
C8: =SOMASES(tbl_Vendas['#_Venda]; tbl_Vendas[Mês]; SEQUÊNCIA(1;12))/1000
C9: =SOMASES(tbl_Vendas[Receita_total_Cliente(R$)]; tbl_Vendas[Cliente]; $C$4;
tbl_Vendas[Mês]; SEQUÊNCIA(1;12))/1000
C10: =SOMASES(tbl_Vendas[Receita_total_Cliente(R$)]; tbl_Vendas[Mês]; SEQUÊNCIA(1;12))/1000
SEQUÊNCIA(1;12) gera os meses 1 a 12 em linha, e cada SOMASES derrama nos 12 meses. A divisão por 1.000 é a escala do modelo: quantidades em milhares de unidades e receitas em R$ mil, como no exemplo da aba. O apóstrofo em '#_Venda aparece sozinho: o # é caractere especial nas referências de Tabela, e o Excel o protege. Para evitá-lo, basta não começar nomes de coluna com #.
Os dois gráficos já existem na aba e passam a responder ao menu. Um detalhe que o professor resolveu em aula: se os rótulos do eixo aparecerem como números, abra Formatar Eixo › Número (Ctrl+1) e marque Vinculado à origem. O mesmo vale para mostrar milhões sem dividir os dados: o formato #.##0,0.." mi" exibe 19.788.048 (mil) como 19,8 mi, e o gráfico herda a exibição.
A linha 6 traz os meses como texto ("jan", "fev"...). Texto não tem ano e não se traduz entre Excel em português e em inglês. Aqui funciona porque a base tem um ano só e a coluna Mês já traz o número do mês. Numa base com vários anos, o professor recomenda uma coluna auxiliar de data de referência na Tabela (=DATA(ANO([@Data_Operação]);MÊS([@Data_Operação]);1), sempre o dia 1 do mês) e datas reais no cabeçalho, formatadas como mmm; a alternativa sem coluna auxiliar é o "sanduíche de datas", com dois critérios: >= primeiro dia do mês e < primeiro dia do mês seguinte.
Checkpoint 3: gráfico final (aba UltimoGrafico). Não confie na lista digitada da aba: traga a lista da base, =CLASSIFICAR(ÚNICO(tbl_Vendas[Cliente])) em B6. Ela tem exatamente os 19 clientes. Depois, uma fórmula despejada por coluna:
C6: =SOMASES(tbl_Vendas[Receita_total_Cliente(R$)]; tbl_Vendas[Cliente]; B6#)
D6: =MAP(B6#; LAMBDA(c; SOMA(FILTRO(ESCOLHERCOLS(Exemplo_Analise1!B6#;7);
ESCOLHERCOLS(Exemplo_Analise1!B6#;2)=c))))
E6: =C6#/SOMASES(tbl_Vendas[Receita_total_Base(R$)]; tbl_Vendas[Cliente]; B6#)-1
Receita anual é a receita efetivamente faturada com o cliente; potencial adicional é a soma, por cliente, da coluna 7 da análise do checkpoint 1; margem padrão do cliente é a receita cliente sobre a receita base, menos 1, agora agregada por cliente (quanto acima da base o vendedor daquele cliente consegue vender, na média dos produtos). Em D6, SOMASES não funciona porque o intervalo de soma é o resultado de ESCOLHERCOLS, e SOMASES exige um intervalo da planilha; o MAP com SOMA(FILTRO(...)) resolve.
Leitura para o gestor comercial:
- O potencial é de R$ 5,37 bilhões por ano (2,25% da receita), espalhado por todos os clientes: nenhum fica abaixo de R$ 200 milhões. O problema é de política comercial, não de um vendedor.
- Os maiores potenciais estão em Mais Barato (R$ 350,6 milhões), WalMart (R$ 335,8 milhões) e Extra (R$ 323,3 milhões); WalMart e Extra têm as menores margens da carteira (48,7% e 48,5%). São as primeiras conversas de renegociação.
- Mais Barato tem o dobro de transações e de receita dos demais clientes (R$ 23,7 bilhões, contra cerca de R$ 12 bilhões dos outros). Antes de levar o número à reunião, confirme se são duas contas registradas com o mesmo nome; o próprio exemplo da aba Exemplo_Analise1 lista Mais Barato duas vezes.
Para aprofundar a análise com as ferramentas do módulo: um Solver poderia definir a meta de margem por cliente que maximiza a receita sem passar de um desconto máximo; um Monte Carlo poderia estimar quanto do potencial se realiza se só parte das renegociações der certo.
- Otimização tem três peças: função objetivo (célula com fórmula), variáveis de decisão (células digitadas) e restrições. Escreva as três antes de abrir o Solver.
- O Solver é ativado em Arquivo › Opções › Suplementos e aparece em Dados › Análise. Ele generaliza o Atingir Meta: várias variáveis, restrições e a opção de maximizar ou minimizar.
- LP Simplex serve para problemas lineares; GRG Não Linear, para não lineares suaves (como o risco de carteira); Evolutionary, para modelos com saltos (SE, CONT.SES).
- Leia o resultado com senso crítico: restrição faltando gera respostas absurdas (900% investido), "≤ 100%" deixa dinheiro parado, erro na célula objetivo para o Solver, e "> 2%" não conta quem está exatamente em 2%.
- O GRG para no primeiro ótimo local que encontra: rode de vários pontos de partida e compare.
- Uma cadeia de Markov tem estados e uma matriz de transição cujas linhas somam 100%; o próximo estado depende só do estado atual.
=MATRIZ.MULT(estado; matriz)projeta um período à frente e derrama sozinho, sem Ctrl+Shift+Enter. A ordem dos fatores importa.- O estado estacionário é para onde o sistema converge; quando todos os estados se comunicam, ele não depende do ponto de partida. Com estado absorvente, todos terminam nele, e a pergunta passa a ser em quanto tempo.
- No case P&J, AGRUPARPOR + LET + MAP produzem a análise completa numa fórmula: potencial de R$ 5,37 bilhões por ano. SOMASES com SEQUÊNCIA e menus suspensos montam o simulador.
- Atingir Meta, Tabela de Dados, Monte Carlo, Solver e Markov respondem a perguntas diferentes: "quanto precisa", "como varia", "qual a chance", "qual o melhor" e "para onde vai".
4.9Exercícios propostos
Use os arquivos do capítulo.
- Na aba Solver_ex, acrescente a restrição que já vem salva no arquivo,
N10:W10 <= 0,4(no máximo 40% por ativo), e refaça as otimizações de máximo retorno e de máxima relação retorno ÷ risco. Quanto a regra custa em cada caso? - Ainda com o teto de 40%, minimize o risco. Qual ativo fica no teto? O que isso diz sobre a restrição?
- Um colega quer usar o método LP Simplex na carteira, porque "é mais rápido e exato". Por que não funciona? Que parte do modelo impede?
- Na aba Markov_ex, com precisão 1, em que período todos morrem com melhora de 20% no tratamento? E com precisão 0,01 e melhora 0%?
- Faça o teste hipotético da aula: com melhora de 50%, coloque 5% de Óbito voltando para Saudável (D40 = 5%; G40 fecha em 95%). Em quanto a população se equilibra em cada estado?
- No diagrama genérico da aba Markov_ex (Exemplo 4.5), comece com 100% no Estado 4 e projete 60 períodos. Qual o estado estacionário? Compare com o Exemplo 4.7.
- No simulador da P&J, qual a participação da Amazon na receita anual da empresa? Em que mês a participação é máxima e em que mês é mínima?
- No exemplo do texto do case (cliente com receita de R$ 15 milhões pagando 15% acima da base, num produto de margem média de 30%), qual é o valor adicionado correto?
- Desafio (o simulador de desconto do slide): na aba Exemplo_Analise2, crie um campo de desconto sobre o preço cliente e outro de variação de volume, com validação de dados, e calcule a receita e a margem adicional resultantes do cliente escolhido. Que desconto zera a margem adicional da Amazon no ano?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 3 · Automatização · Capítulo 1
Power Query: descreva o processo uma vez
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →Este módulo trata de um tipo de trabalho que todo analista conhece: o que se repete. O relatório que precisa ser refeito todo mês, a base que chega do sistema sempre com os mesmos defeitos, a sequência de cliques que só uma pessoa da equipe sabe executar. Nos dois primeiros módulos você aprendeu a construir fórmulas e modelos. Agora o objetivo é manter esses modelos vivos com o mínimo de trabalho manual, e para isso o curso usa três ferramentas.
| Ferramenta | Use quando | Quem executa |
|---|---|---|
| Power Query | É preciso tratar e consolidar dados que chegam de fora, com recorrência | O Excel, quando você clica em Atualizar |
| VBA (macros) | Uma rotina de ações dentro da pasta de trabalho precisa rodar com um clique | O Excel, no clique de um botão |
| IA | É preciso escrever o código dessas ferramentas, revisar ou documentar | Você, conversando com o assistente |
Tabela 1.1. As três ferramentas do módulo de Automatização e o papel de cada uma.
A regra que costura o módulo: um processo que se repete sempre do mesmo jeito é determinístico e deve virar uma receita (uma consulta do Power Query, uma macro, um script), que roda igual toda vez, pode ser auditada e não depende de ninguém. A IA entra para construir essas receitas mais rápido, e não para executar o mesmo trabalho repetitivo todo mês. Este capítulo trata do Power Query; os seguintes tratam do VBA e da IA.
O Power Query resolve as duas etapas do meio de qualquer rotina de análise. A primeira etapa é entrar no sistema, baixar o relatório e salvar numa pasta. A segunda é abrir esse arquivo e consertar o que vem torto: tirar linhas, ajustar colunas, padronizar nomes, cruzar com um cadastro. A terceira é atualizar a análise com os dados novos. Com o Power Query, a segunda e a terceira etapas viram um botão. A primeira também pode ser automatizada, com as ferramentas do capítulo de IA.
- Explicar o que é ETL e por que pensar em receita, e não em resultado.
- Importar um CSV e navegar pelo Editor do Power Query: consultas, Etapas Aplicadas, barra de fórmulas e Editor Avançado.
- Aplicar as transformações que resolvem a maior parte dos casos: remover linhas, promover cabeçalhos, filtrar, substituir, padronizar texto e agrupar.
- Configurar os tipos de coluna antes de tudo e usar a opção Usando Localidade para números e datas no padrão brasileiro.
- Escolher entre carregar como tabela, tabela dinâmica ou apenas conexão.
- Converter formato largo em longo com Despivotar Outras Colunas.
- Empilhar bases iguais com Acrescentar (inclusive uma pasta inteira) e cruzar bases diferentes com Mesclar.
- Montar uma consulta completa que se atualiza sozinha quando chega o arquivo do mês seguinte.
1.1Por que o Power Query existe
Pense no relatório mensal que consome duas horas. O ciclo costuma ser o mesmo:
- Baixar os arquivos do sistema (ERP, CRM, BI).
- Abrir cada um, copiar e colar numa planilha consolidadora.
- Limpar formatação, ajustar colunas, padronizar nomes.
- Fazer PROCV para enriquecer com dados de cadastro.
- Construir a tabela dinâmica.
- No mês seguinte, repetir tudo.
Cada repetição é uma nova chance de erro: uma linha colada fora do lugar, um filtro esquecido, um "Sul" escrito de outro jeito. Com o Power Query, o ciclo vira: colocar o arquivo novo na pasta, clicar em Dados › Atualizar Tudo e pronto. A receita do tratamento fica salva no arquivo, e o Excel a executa.
O modelo mental: ETL
Sigla do mundo de dados para extrair (obter os dados onde estiverem), transformar (tratar até ficarem utilizáveis) e carregar (entregar o resultado). O Power Query é, na essência, uma ferramenta de ETL embutida no Excel. O botão Atualizar reexecuta as três etapas sem que você refaça nada.
As fontes possíveis vão muito além do CSV: outra pasta de trabalho, uma pasta inteira de arquivos, PDF, JSON, uma pasta do SharePoint, um endereço da web, um banco de dados. No caso do banco de dados há um ganho extra: em vez de abrir no Excel uma tabela com milhões de linhas, o Power Query trata os dados e traz para a planilha só o resultado já resumido.
Receita × resultado
| Quem pensa em resultado | Quem pensa em receita |
|---|---|
| "Como produzo este número?" | "Como descrevo o processo que produz este número?" |
| Esforço repetido a cada execução | Esforço uma vez, execução automática |
| Histórico não documentado | Histórico explícito nas Etapas Aplicadas |
| Difícil de auditar | Auditável por qualquer um |
| Depende de quem fez | Independe de quem rodou |
Tabela 1.2. Receita × resultado. A consulta do Power Query é, ao mesmo tempo, a automação e a documentação do processo.
Esse segundo ponto é subestimado. Quando um processo passa de uma pessoa para outra (por férias, promoção ou troca de área), a consulta mostra de onde o dado vem, o que é feito com ele e para onde vai. E o Power Query faz sempre igual: não pula etapa nem cola na linha errada.
Power Query não é uma fórmula nova. É uma forma de descrever processos repetíveis. Para uma análise pontual, que nunca mais vai ser refeita, montar a consulta pode dar mais trabalho do que tratar o dado à mão. A pergunta que decide é: vou precisar atualizar isto de novo?
Onde fica
Tudo começa na guia Dados, no grupo da esquerda:
- Obter Dados: lista todas as fontes (De Arquivo › De Texto/CSV, Da Pasta, Do Excel; De Banco de Dados; De Outras Fontes › Da Web, Consulta em Branco...).
- Consultas e Conexões: abre o painel lateral com todas as consultas do arquivo e o tipo de carga de cada uma.
- Atualizar Tudo: reexecuta todas as consultas.
- Alt+F12 abre direto o Editor do Power Query (assim como Alt+F11 abre o editor do VBA).
Uma pergunta que você faz aos dados: de onde ler, o que fazer com eles e onde entregar. Cada consulta é uma receita de ETL completa, com nome próprio, e aparece no painel Consultas e Conexões.
1.2O Editor do Power Query
O primeiro exemplo da aula é um CSV com todos os defeitos que aparecem no dia a dia: vendas_jan2026_export.csv, uma exportação de vendas de janeiro de 2026. Aberto no Bloco de Notas, ele começa assim:
(linha vazia)
Relatório de Vendas - Janeiro/2026
(linha vazia)
Data;Vendedor;Cliente;Produto;Quantidade;Preço Unitário;Total;Região
01/01/2026;Karen Vieira;Cliente C3;NoteBook ;22;R$ 1.332,37;R$ 29.312,14;sudeste
21/01/2026;Fernanda Rocha;Cliente A3;TABLET;14,00;R$ 275,12;R$ 3.851,68;Sul
Separador ponto e vírgula, título e linhas vazias no topo, quantidades ora inteiras, ora com ,00, valores com R$ e ponto de milhar, produtos e regiões escritos de vários jeitos. Ao longo do arquivo ainda aparecem linhas Subtotal: e, no fim, uma linha Total Geral:.
Para importar: Dados › Obter Dados › De Arquivo › De Texto/CSV, escolha o arquivo e clique em Importar. Abre uma prévia com a origem do arquivo, o delimitador detectado (ponto e vírgula) e a detecção de tipos, feita com base nas primeiras 200 linhas. Há dois botões: Carregar e Transformar Dados.
Carregar joga os dados no Excel como estão, com todo o lixo. Transformar Dados abre o Editor para você tratar antes. Como o tratamento vai ser feito de qualquer jeito, é mais rápido ir direto ao Editor.
Situação: o CSV de janeiro foi carregado direto, sem passar pelo Editor.
- O Power Query cria uma aba com uma Tabela de 260 linhas e colunas chamadas Column1, Column2... As três primeiras linhas são lixo e o cabeçalho de verdade está na quarta.
- Selecione a coluna do Total: a barra de status mostra só a contagem, sem soma. A coluna inteira é texto.
- Conserte à mão: apague as linhas do topo, substitua
R$por nada com Ctrl+U, troque "SUL" por "Sul". Em um Excel configurado em inglês, os números com vírgula decimal continuam como texto. - Clique em Dados › Atualizar Tudo.
Resultado: todas as correções manuais somem. O Atualizar relê o arquivo e aplica a receita que está no Power Query, que até aqui não tem nenhum tratamento. A lição: o tratamento precisa estar dentro da consulta, e não na planilha. Para voltar ao Editor, dê um duplo clique na consulta no painel Consultas e Conexões (ou Alt+F12).
Tour do Editor
| Painel | O que mostra |
|---|---|
| Consultas (esquerda) | Todas as consultas do arquivo |
| Faixa de Opções (topo) | As transformações, nas guias Página Inicial, Transformar, Adicionar Coluna e Exibir |
| Barra de Fórmulas | O código M da etapa selecionada |
| Grade (centro) | Os dados como estão até a etapa selecionada |
| Configurações de Consulta (direita) | O nome da consulta e as Etapas Aplicadas: a receita |
| Rodapé | O total de colunas e de linhas |
Tabela 1.3. Os painéis do Editor. Onde olhar primeiro: o nome da consulta, a última etapa aplicada, o tipo da coluna selecionada e o total de linhas.
Clicar numa etapa anterior mostra os dados naquele momento do processo, sem desfazer nada: é a forma de investigar onde um problema começou. O X ao lado da etapa a exclui. Uma ressalva: excluir ou inserir uma etapa no meio da receita pode quebrar as seguintes, porque cada etapa trabalha sobre o resultado da anterior. O Power Query avisa antes de fazer isso.
Em Exibir, marque Qualidade da Coluna (e, se quiser, Distribuição de Colunas). Cada cabeçalho ganha uma barra verde com o percentual de valores válidos, vazios e com erro. "98% válido, 4 erros" é o sinal de que algo precisa de tratamento. O perfil é calculado nas primeiras 1.000 linhas; o rodapé avisa isso, e o menu de filtro da coluna tem a opção Carregar mais para ver todos os valores distintos.
Linguagem M e o Editor Avançado
Cada etapa é uma linha de código na linguagem M. Em Página Inicial › Editor Avançado aparece a receita inteira:
let
Fonte = Csv.Document(File.Contents("C:\dados\vendas_jan2026_export.csv"),
[Delimiter=";", Columns=8, Encoding=65001]),
#"Linhas Superiores Removidas" = Table.Skip(Fonte, 3),
#"Cabeçalhos Promovidos" = Table.PromoteHeaders(#"Linhas Superiores Removidas"),
#"Linhas Filtradas" = Table.SelectRows(#"Cabeçalhos Promovidos",
each [Data] <> "Subtotal:" and [Data] <> "Total Geral:")
in
#"Linhas Filtradas"
Três regras de leitura bastam por enquanto: let declara as etapas e in devolve o resultado; cada etapa usa o nome da anterior, numa corrente; e um nome com espaço vira #"Nome da Etapa". Renomear uma etapa no código exige renomear também onde ela é usada; caso contrário aparece o erro de que a etapa não foi encontrada. A seção 1.8 volta à linguagem M.
A etapa Fonte guarda o caminho completo do arquivo (C:\... ou a letra do drive de rede). Se outra pessoa abrir a pasta de trabalho, o caminho dela é diferente e a consulta quebra. Soluções: trocar o caminho no Editor Avançado, usar um parâmetro (seção 1.8) ou ler o arquivo de um endereço igual para todos, como uma pasta do SharePoint.
1.3As transformações essenciais
Dez transformações resolvem a maior parte dos casos.
| Estruturais | Limpeza e formato |
|---|---|
| Usar a Primeira Linha como Cabeçalho (Promover Cabeçalhos) | Tipo de Dados (seção 1.4) |
| Remover Linhas: superiores, inferiores, em branco, duplicatas | Substituir Valores |
| Remover Colunas / Remover Outras Colunas | Dividir Coluna por Delimitador |
| Filtrar e Classificar | Formatar texto: Aparar, minúsculas, MAIÚSCULAS, Cada Palavra em Maiúscula |
| Remover Duplicatas | Agrupar Por (depende do tipo certo) |
Tabela 1.4. As transformações que resolvem a maior parte dos casos. Ao final, Fechar e Carregar entrega o resultado.
- Página Inicial › Remover Linhas › Remover Linhas Superiores: 3. Saem a linha vazia, o título e a outra linha vazia.
- Página Inicial › Usar a Primeira Linha como Cabeçalho. As colunas passam a se chamar Data, Vendedor, Cliente... O Power Query acrescenta sozinho uma etapa "Tipo Alterado", que vamos refazer na seção 1.4.
- Abra o filtro da coluna Data e desmarque
Subtotal:eTotal Geral:.
Resultado: de 260 linhas para 250, uma por venda. Os subtotais estão espalhados pelo arquivo (a cada 50 vendas), por isso Remover Linhas Inferiores não resolve sozinho: ele só alcança as últimas linhas. O filtro pega todas, onde quer que estejam, e continua funcionando se o arquivo do mês seguinte tiver mais ou menos subtotais.
As linhas de subtotal do arquivo mostram sempre R$ 5.000,00, e o Total Geral mostra R$ 46.485,12. A soma real das 250 vendas é R$ 2.697.683,07. Totais impressos num relatório exportado são texto, sem garantia nenhuma de que batem com os dados. Tire essas linhas da base e calcule os totais você mesmo, na tabela dinâmica ou num Agrupar Por.
Padronizar texto
Agrupada como veio, a coluna Região tem sete valores diferentes para cinco regiões: Sul, SUL, Sudeste e sudeste convivem. Na coluna Produto, "tablet" e "TABLET" são o mesmo produto, e "NoteBook " (com espaço no final) difere de "Notebook".
- Selecione Região e Produto (Ctrl+clique nos cabeçalhos).
- Transformar › Formatar › Aparar: tira espaços no início e no fim (o ARRUMAR do Power Query).
- Transformar › Formatar › Colocar Cada Palavra em Maiúscula: "SUL" e "sul" viram "Sul"; "TABLET" vira "Tablet".
- Confira os valores no filtro da coluna. O passo 3 tem efeito colateral: "Cabo HDMI" vira "Cabo Hdmi" e "Caixa de Som" vira "Caixa De Som". Corrija com Substituir Valores (botão direito na coluna):
HdmiporHDMIeDe Somporde Som.
Resultado: Região fica com 5 valores e Produto com 13 (eram 15). Antes da padronização, o Sul aparecia dividido em "Sul" (40 vendas, R$ 460.850,10) e "SUL" (37 vendas, R$ 377.197,78); depois, é uma região só, com 77 vendas e R$ 838.047,88.
= Table.TransformColumns(#"Linhas Filtradas",
{{"Produto", Text.Trim}, {"Região", Text.Trim}})
= Table.TransformColumns(#"Texto Aparado",
{{"Produto", Text.Proper}, {"Região", Text.Proper}})
= Table.ReplaceValue(#"Cada Palavra em Maiúscula","Hdmi","HDMI",
Replacer.ReplaceText,{"Produto"})
Uma tabela dinâmica feita sobre a base suja junta "Sul" e "SUL" numa linha só, porque não diferencia maiúsculas de minúsculas. O Power Query diferencia: no Agrupar Por, no Mesclar e nos filtros, "Sul" e "SUL" são valores distintos. Padronize antes de agrupar ou cruzar. Na própria aula, a primeira versão da consulta de janeiro ficou com "Cabo Hdmi" e "Caixa De Som" porque a substituição do passo 4 não foi feita (No Excel 1.1): confira sempre os valores distintos depois de mudar maiúsculas.
A alternativa ao passo 3 é usar só Substituir Valores, uma etapa por grafia errada ("SUL" por "Sul", "sudeste" por "Sudeste", "TABLET" por "Tablet"...). Funciona, mas não pega a grafia nova que aparecer no mês seguinte. Capitalizar resolve todas as variações de uma vez e deixa para a substituição só as exceções.
Outras transformações úteis
- Dividir Coluna › Por Delimitador (guia Transformar). Na coluna Cliente, o texto "Cliente" se repete em toda linha ("Cliente C3"). Dividir pelo espaço gera Cliente.1 e Cliente.2; remova a primeira e renomeie a segunda com duplo clique no cabeçalho.
- Remover Outras Colunas (botão direito). Em relatórios com dezenas de colunas, selecione só as que interessam e remova o resto.
- Ir para Coluna (guia Exibir). Em bases com 80 colunas, digite parte do nome e o Editor leva até ela.
1.4Tipos de coluna e localidade
O ícone no cabeçalho mostra como o Power Query está lendo cada coluna: ABC é texto, 1²3 é número inteiro, 1.2 é decimal, $ é moeda, e um calendário indica data (com relógio, data/hora). Clicar no ícone troca o tipo.
| Tipo | Quando usar | Armadilha |
|---|---|---|
| Texto | Nomes, códigos, descrições | O Power Query promove tudo a texto quando não reconhece o padrão |
| Inteiro | Quantidades, contagens, IDs | "1,50" convertido para inteiro perde a parte decimal |
| Decimal / Moeda | Valores, preços | Vírgula ou ponto decimal depende da localidade |
| Porcentagem | Margens, taxas | O texto "15%" não é o número 0,15 |
| Data | Datas sem hora | DD/MM × MM/DD: use Usando Localidade |
| Data/Hora | Registros com horário | Descarte a hora se ela não for usada |
Tabela 1.5. Os seis tipos que importam. Sem o tipo certo, o Power Query não soma, não agrupa, não compara datas e não filtra direito.
Toda vez que carregar uma fonte nova: primeiro remova as linhas que sobram e promova os cabeçalhos; depois configure o tipo de todas as colunas; só então faça as outras transformações. O Power Query adivinha os tipos olhando as primeiras linhas. Com o título do relatório no topo, ele conclui que todas as colunas são texto.
Usando Localidade
O CSV veio no padrão brasileiro: dia/mês/ano, ponto no milhar e vírgula no decimal. Se o Windows estiver configurado em inglês (o caso do professor), o Power Query lê 14,00 como 1.400, porque para ele a vírgula separa milhares. A solução é dizer de onde vêm os dados: botão direito no cabeçalho › Alterar Tipo › Usando Localidade (em inglês, Change Type › Using Locale).
Situação: depois de filtrar os subtotais, as colunas Data, Quantidade, Preço Unitário e Total ainda são texto (ou foram convertidas errado pela etapa automática).
- Exclua a etapa automática "Tipo Alterado" que veio com a promoção dos cabeçalhos.
- Data: botão direito › Alterar Tipo › Usando Localidade › Tipo Data, Localidade Português (Brasil).
- Quantidade: o mesmo, com tipo Número Inteiro.
- Preço Unitário e Total: selecione as duas e aplique de uma vez, tipo Número Decimal Fixo (moeda), Português (Brasil). O
R$e o ponto de milhar são interpretados corretamente.
Resultado: a qualidade das colunas fica em 100%. Sem a localidade, os estragos seriam grandes e, em parte, silenciosos:
- 135 das 250 quantidades vêm escritas com
,00. Lidas no padrão americano, a quantidade total do mês iria de 3.429 para 185.688 unidades. - 148 datas, com dia maior que 12, dariam erro, o que pelo menos aparece. As outras 102 seriam convertidas com dia e mês trocados, sem aviso: 03/01/2026 viraria 1º de março.
- Os valores com
R$dariam erro ou números absurdos.
A etapa gerada é uma só, com a cultura no final:
= Table.TransformColumnTypes(#"Linhas Filtradas",
{{"Data", type date}, {"Quantidade", Int64.Type},
{"Preço Unitário", Currency.Type}, {"Total", Currency.Type}}, "pt-BR")
O caminho intuitivo é substituir R$ por nada, aparar e depois mudar o tipo. No Windows em inglês, o ponto de milhar e a vírgula decimal continuam sendo lidos ao contrário: parte dos valores dá erro e parte vira um número errado (R$ 275,12 virando 27.512, por exemplo). O caminho certo é Usando Localidade. A localidade não depende do idioma do Excel, e sim da configuração regional do Windows: um Excel em português num Windows em inglês tem o mesmo problema.
Agrupar Por: tipo não é estética, é contrato
Transformar › Agrupar Por (Group By) resume a base dentro do Power Query, como uma tabela dinâmica: escolha a coluna de agrupamento, a operação (Soma, Contagem, Média...) e a coluna a operar. Em Avançado, dá para agrupar por mais de uma coluna e criar várias agregações.
Situação: validar a base de janeiro com a soma do Total por Região.
- Com Total ainda como texto, Agrupar Por Região, nova coluna Total = Soma de Total. O resultado é Error em todas as linhas: não se soma texto.
- Com os tipos do Exemplo 1.4 e a padronização do Exemplo 1.3, repita o agrupamento.
Resultado:
| Região | Vendas | Soma do Total (R$) |
|---|---|---|
| Centro-Oeste | 26 | 269.394,35 |
| Nordeste | 36 | 491.937,35 |
| Norte | 39 | 380.309,51 |
| Sudeste | 72 | 717.993,98 |
| Sul | 77 | 838.047,88 |
| Total | 250 | 2.697.683,07 |
Sem a padronização, o mesmo agrupamento devolveria sete linhas. O Agrupar Por é um bom teste rápido de que tipos e textos estão corretos. Para mantê-lo sem perder a base detalhada, duplique a consulta (botão direito › Duplicar) e agrupe na cópia.
Tabela 1.6. Agrupar Por Região na consulta de janeiro.
Carregar: tabela, tabela dinâmica ou apenas conexão
Página Inicial › Fechar e Carregar usa o destino padrão (uma Tabela numa aba nova). Fechar e Carregar Para... deixa escolher.
| Destino | Use quando |
|---|---|
| Tabela | Você quer ver e usar os dados, alimentar fórmulas ou montar várias tabelas dinâmicas sobre a mesma base |
| Tabela Dinâmica | O destino final é uma única análise resumida; o arquivo fica mais leve |
| Apenas Conexão | A consulta é um passo intermediário: vai ser usada em Mesclar ou Acrescentar, ou só alimenta outra consulta |
| Adicionar ao Modelo de Dados (caixa de seleção) | Os dados vão para o Modelo de Dados, para relacionamentos e Power Pivot |
Tabela 1.7. Opções de carga.
Cada Tabela carregada numa aba pesa no arquivo. No case da aula, o arquivo com quatro consultas carregadas apenas como conexão tinha 458 KB; carregando as mesmas consultas em Tabelas, passou a 565 KB, sem nenhuma informação a mais. Se você apagar a aba de uma consulta, ela não some: vira Apenas Conexão, e o botão direito › Carregar Para... a traz de volta.
Uma tabela dinâmica montada sobre a Tabela carregada só se atualiza quando é atualizada. Use Dados › Atualizar Tudo, que roda as consultas e depois as tabelas dinâmicas. Outro detalhe: a mudança de colunas numa consulta pode quebrar uma tabela dinâmica que dependa dela; o Excel avisa antes.
Reaproveitar a receita
Para tratar fevereiro igual a janeiro, não é preciso clicar tudo de novo. Botão direito na consulta de janeiro › Duplicar, renomeie para fevereiro, abra o Editor Avançado e troque, na etapa Fonte, vendas_jan2026_export.csv por vendas_fev2026_export.csv. Todas as etapas valem para o novo arquivo. Outra forma: Nova Fonte › Outras Fontes › Consulta Nula (consulta em branco) e colar o código no Editor Avançado; é o caminho para usar um código M escrito por você ou por um assistente de IA, tema do capítulo de IA.
A duplicação tem um custo de manutenção: se a regra mudar, você corrige em cada cópia. Para muitos arquivos iguais, há caminhos melhores, a pasta (seção 1.6) e a função personalizada (seção 1.8).
O Atualizar relê o arquivo pelo caminho e pelo nome. Para atualizar a análise, substitua o arquivo na pasta por um com o mesmo nome e a mesma estrutura. Abrir e editar o arquivo de origem à mão costuma quebrar a receita: na aula, um CSV salvo de novo pelo Excel perdeu uma linha do topo, e a etapa que removia 3 linhas passou a cortar o cabeçalho.
1.5Despivotar e pivotar
Relatórios são feitos para pessoas e costumam vir no formato largo: um mês por coluna. Bases de dados são feitas para máquinas e funcionam melhor no formato longo: uma coluna para o mês, uma para o valor, uma linha para cada combinação.
| Formato largo | Formato longo | |
|---|---|---|
| Bom para | O humano ler | A máquina analisar |
| Tabela dinâmica | Cada mês é um campo a arrastar | Um campo Mês, que vira colunas com um clique |
| Mês novo | Muda a estrutura (coluna nova) | Só acrescenta linhas |
| Fórmulas e BI | Exigem varrer várias colunas | É o formato esperado |
Tabela 1.8. Formato largo × formato longo.
Despivotar (Unpivot) converte do largo para o longo; Pivotar faz o caminho inverso.
Situação: o orçamento de 2025 tem 40 centros de custo nas linhas e 12 meses nas colunas, mais uma coluna Total Anual.
- Dados › Obter Dados › Do Arquivo › Do Excel. O Navegador mostra todas as abas e tabelas do arquivo; marque só Orcamento_2025 e clique em Transformar Dados. (A aba de capa do arquivo não interessa.)
- Remova a primeira linha (vazia) e promova os cabeçalhos.
- Remova a coluna Total Anual.
- Selecione Centro de Custo e Categoria › botão direito › Despivotar Outras Colunas.
- Renomeie Atributo para Mês e Valor para Orçamento.
- Opcional: Dividir Coluna › Por Delimitador em Centro de Custo, com o delimitador personalizado
-(espaço, traço, espaço), para separar código (CC-001) e nome (Diretoria).
Resultado: 40 × 12 = 480 linhas, e o orçamento total soma R$ 20.509.820,05. "Outras Colunas" é a escolha certa: a receita continua funcionando se um mês for acrescentado, porque não lista os meses, só as colunas fixas.
Sem o passo 3, o Total Anual é despivotado como se fosse um 13º mês: a base fica com 520 linhas e o orçamento somado dobra para R$ 41.019.640,10. Antes de despivotar, procure colunas e linhas de total e retire-as da base. Os totais você recalcula depois.
Com a base longa, a tabela dinâmica de orçamento por categoria e mês sai arrastando três campos. Mas aparece um detalhe: os meses chegam fora de ordem.
"Jan" é texto de três letras, e o Excel ordena texto como quiser (ou arrastando à mão). O ideal é converter o mês numa data de verdade, por exemplo uma coluna com o primeiro dia de cada mês, criada com uma Coluna Personalizada (seção 1.8). Com data, a tabela dinâmica ordena corretamente e permite agrupar por mês, trimestre e ano.
Para pivotar, selecione a coluna cujos valores vão virar cabeçalhos (Mês) › Transformar › Coluna Dinâmica e indique a coluna de valores (Orçamento). Em Opções Avançadas, escolha a agregação (Soma, ou Não Agregar quando cada combinação aparece uma vez só).
1.6Acrescentar: consolidar meses e pastas
| Acrescentar | Mesclar | |
|---|---|---|
| Direção | Vertical: empilha linhas | Horizontal: traz colunas de outra tabela |
| Em inglês / SQL | Append / UNION ALL | Merge / JOIN |
| Exige | As mesmas colunas, com os mesmos nomes | Uma coluna em comum (a chave) |
| Exemplos | Vendas de jan + fev + mar; planilhas das filiais | Vendas + cadastro de produtos; pedidos + clientes |
Tabela 1.9. Acrescentar × Mesclar.
- Página Inicial › Acrescentar Consultas ▾ › Acrescentar Consultas como Novas.
- Escolha Duas tabelas (ou Três ou mais, para montar a lista) e selecione janeiro e fevereiro.
- Renomeie a nova consulta (por exemplo, Vendas_Jan_Fev) e carregue as consultas mensais como Apenas Conexão.
Resultado: 250 + 220 = 470 linhas, com Total de R$ 4.997.220,51. "Acrescentar Consultas" sem o "como Novas" altera a consulta selecionada em vez de criar outra; criar uma nova preserva as consultas originais.
O Power Query alinha as colunas pelo nome. Colunas que só existem numa das tabelas são criadas e preenchidas com nulo na outra. Na aula, acrescentar as metas às vendas "funcionou" e produziu uma tabela sem sentido, com Vendedor e Região alinhados e o resto em colunas separadas. Acrescente apenas a mesma tabela de períodos, filiais ou regiões diferentes.
Uma pasta inteira
O caso mais poderoso do Acrescentar dispensa uma consulta por arquivo. A pasta vendas_2025 tem 12 CSVs, um por mês, todos com as colunas data_venda, id_vendedor, id_produto, id_cliente, quantidade, valor_unitario.
- Dados › Obter Dados › De Arquivo › Da Pasta e escolha a pasta.
- A janela lista os arquivos. Clique em Combinar › Combinar e Transformar Dados.
- Na janela Combinar Arquivos, confira o arquivo de exemplo e o delimitador (vírgula) e dê OK.
- Confira os tipos: aqui os CSVs vêm no padrão americano (
2025-01-08,1580.55), e o Power Query acerta sozinho. A qualidade fica em 100%. - No filtro da coluna Source.Name, confira se os 12 arquivos estão lá.
Resultado: 1.890 linhas, de 143 (abril) a 169 (novembro) vendas por mês. Com a coluna Receita = quantidade × valor_unitario (criada no mini case, na seção 1.9), o faturamento de 2025 soma R$ 24.933.953,18.
A recompensa vem no mês seguinte: coloque vendas_2026_01.csv na pasta e clique em Atualizar Tudo. A consulta relê a pasta, encontra o arquivo novo e o inclui. Nenhuma etapa precisa ser alterada.
Tudo o que estiver na pasta entra na consulta, inclusive um arquivo esquecido, uma cópia ou um mês fora do período. Na aula, o arquivo de janeiro de 2026 estava na pasta desde o início e apareceu no consolidado de 2025. Mantenha uma pasta só para a série e, se precisar, filtre a coluna Extension ou Name logo no começo da consulta.
1.7Mesclar: o PROCV do Power Query
Mesclar junta duas tabelas por uma coluna em comum, a chave. É o trabalho que o PROCV e o PROCX fazem: para cada linha da tabela principal, buscar a chave na outra tabela e trazer informações dela. Uma boa chave é única para cada registro, como um ID; nomes funcionam na maior parte das vezes, mas falham com homônimos e grafias diferentes.
| Junção | O que faz | Quando usar |
|---|---|---|
| Externa esquerda | Mantém tudo da primeira tabela; da segunda, só o que tiver correspondência | O padrão: equivale ao PROCV |
| Externa direita | Mantém tudo da segunda | Raro na prática |
| Interna | Só as linhas com correspondência nos dois lados | Descartar quem não tem par |
| Externa completa | Tudo dos dois lados | Auditar lacunas de cadastro |
| Anti esquerda / Anti direita | Só as linhas sem correspondência | Listar diretamente as órfãs |
Tabela 1.10. Tipos de junção. A primeira tabela (esquerda) é a de referência; a segunda (direita) é onde se busca.
- Importe
cad_vendedores.xlsx(aba Vendedores), remova a linha vazia do topo, promova os cabeçalhos, confira os tipos (id_vendedorinteiro,data_admissaodata) e carregue como Apenas Conexão. - Na consulta vendas_2025: Página Inicial › Mesclar Consultas (ou Mesclar Consultas como Novas, para preservar a original).
- Tabela de baixo: Vendedores. Clique em
id_vendedornas duas tabelas. Tipo de Junção: Externa esquerda. - A janela informa: "A seleção corresponde a 1885 de 1890 linhas da primeira tabela". OK.
- Surge uma coluna Vendedores em que cada célula diz "Table". Clique no ícone de seta dupla do cabeçalho, marque
nome_vendedor,regiaoegerente(o id já existe na base) e desmarque Usar o nome da coluna original como prefixo. - Filtre
nome_vendedor= nulo para auditar e, depois de olhar, exclua essa etapa de filtro.
Resultado: 1.890 linhas, das quais 5 sem vendedor: 3 vendas do id 116 e 2 do id 117, somando R$ 138.143,97. O cadastro vai de 101 a 115. Provavelmente são vendedores novos, e o cadastro está desatualizado.
Escolher outra junção muda a contagem de linhas:
| Junção | Linhas | O que acontece com as 5 órfãs |
|---|---|---|
| Externa esquerda | 1.890 | Ficam, com nome nulo |
| Interna | 1.885 | São descartadas |
| Externa completa | 1.890 | Ficam (todos os vendedores do cadastro têm venda) |
| Externa direita | 1.885 | São descartadas |
| Anti esquerda | 5 | São as únicas que sobram |
Tabela 1.11. A mesma mesclagem com cada tipo de junção.
Para auditar o cadastro, a Externa completa (ou a Anti esquerda) é a escolha: ela mostra os dois lados da lacuna. Para o relatório, a Externa esquerda é a mais segura, porque nenhuma venda desaparece do total; a Interna faria sumir R$ 138.143,97 sem aviso.
Quando o cadastro for corrigido (com os ids 116 e 117 incluídos no mesmo arquivo, com a mesma estrutura), basta Atualizar Tudo: as vendas órfãs passam a ter nome, região e gerente.
Trazer três colunas para 1.890 linhas com PROCV são 5.670 fórmulas, recalculadas a cada edição da planilha. No Power Query, o cruzamento acontece só quando você manda atualizar. Com bases grandes, a diferença é entre uma planilha que trava a cada Enter e uma atualização de alguns segundos, uma vez por dia.
Uma organização que facilita a manutenção: consultas que só leem e limpam cada fonte (Apenas Conexão), agrupadas numa pasta "Dados iniciais" (botão direito › Mover para Grupo › Novo Grupo), e consultas que cruzam e entregam a análise. No mundo de dados, fala-se em camadas bronze (o dado cru), prata (limpo e tipado) e ouro (pronto para a análise).
1.8Além dos cliques: M, parâmetros e funções
A aula cobre o que resolve a maior parte dos casos. O anexo dos slides aponta os próximos passos, resumidos aqui.
| Tema | O que destrava |
|---|---|
| Linguagem M | Ler e ajustar o código por trás dos cliques |
| Coluna Condicional e Personalizada | Lógica e cálculos dentro do Power Query |
| Parâmetros | Trocar caminho, mês ou filtro sem editar a receita |
| Funções personalizadas | Uma regra só, aplicada a muitos relatórios iguais |
| Bancos de dados | Ir direto à fonte, sem exportar CSV |
| Web e SharePoint | Fontes com endereço igual para todos |
| Correspondência Difusa | Mesclar nomes parecidos, mas não idênticos |
Tabela 1.12. Os próximos passos no Power Query.
Coluna Condicional e Coluna Personalizada
Adicionar Coluna › Coluna Condicional monta um "se / então / senão" por formulário e gera o M sozinha. Adicionar Coluna › Coluna Personalizada recebe a expressão escrita direto. Dica: comece na condicional e depois leia (e edite) o M gerado.
// cálculo simples
[Quantidade] * [ValorUnitario]
// classificação (if ... then ... else; o else é obrigatório)
if [Total] >= 10000 then "Alta" else if [Total] >= 5000 then "Média" else "Baixa"
// primeiro dia do mês, para agrupar por mês
Date.StartOfMonth([Data])
// divisão: no M, dividir por zero não dá erro, devolve infinito; proteja com if
if [Quantidade] = 0 then 0 else [Total] / [Quantidade]
// try ... otherwise: para erro de verdade, como uma conversão que falha
try Number.FromText([TotalTexto]) otherwise null
Com a classificação acima (Alta a partir de R$ 10.000, Média a partir de R$ 5.000), as 250 vendas de janeiro se dividem em 108 Altas (R$ 2.060.498,10), 54 Médias (R$ 411.425,19) e 88 Baixas (R$ 225.759,78). Ou seja, 43% das vendas respondem por 76% do faturamento do mês. A ordem dos testes importa, como no SE aninhado: começando por >= 5000, nenhuma venda seria Alta.
Em M, each significa "para cada linha" e [Coluna] é o valor daquela coluna na linha. M diferencia maiúsculas de minúsculas: Text.Upper funciona, text.upper não. Funções que aparecem muito: Table.SelectRows (filtrar), Table.AddColumn (criar coluna), Table.TransformColumnTypes (tipos), Text.Trim, Text.Proper, Date.Year, List.Sum. A referência oficial está em learn.microsoft.com/pt-br/powerquery-m.
Parâmetros
Quando o caminho, o mês ou o filtro estão escritos dentro da receita, trocar exige abrir o Editor. Um parâmetro tira esse valor da receita: Página Inicial › Gerenciar Parâmetros › Novo Parâmetro, e depois a etapa Fonte passa a usar o parâmetro no lugar do caminho fixo. O uso mais prático é o caminho da pasta, que muda de computador para computador.
O padrão mais útil é o parâmetro alimentado por uma célula: o usuário digita o valor na planilha e a consulta obedece.
// tbl_Param: Tabela do Excel com as colunas Parametro | Valor (MesRef | 2026-01)
// Importada com Dados › De Tabela/Intervalo, reduzida a um valor (Fazer Drill Down)
// e carregada como Apenas Conexão, com o nome pMesRef:
let
Origem = Excel.CurrentWorkbook(){[Name="tbl_Param"]}[Content],
Valor = Origem{0}[Valor]
in
Valor
// na consulta principal:
Table.SelectRows(Tipos, each [MesRef] = pMesRef)
Funções personalizadas
Doze relatórios mensais com a mesma estrutura, cada um precisando das mesmas oito transformações: com uma consulta por relatório, mudar a regra é editar doze lugares, e basta esquecer um para os números divergirem. Com uma função, a regra vive num lugar só. É o mesmo princípio da LAMBDA nomeada do módulo Tools: não repita a lógica, dê um nome a ela.
Você não escreve a função do zero. Monte a consulta para um arquivo até ficar perfeita, crie um parâmetro para o que muda (o caminho, pCaminho), use-o na etapa Fonte e clique com o botão direito na consulta › Criar Função. O Power Query embrulha a receita:
// fnTratarRelatorio
(pCaminho as text) as table =>
let
Origem = Excel.Workbook(File.Contents(pCaminho), null, true),
Planilha = Origem{[Item="Vendas",Kind="Sheet"]}[Data],
Cabecalhos = Table.PromoteHeaders(Planilha),
Tipos = Table.TransformColumnTypes(Cabecalhos,{{"Data", type date},{"Total", Currency.Type}}),
SemSubtotais = Table.SelectRows(Tipos, each [Regiao] <> "Subtotal")
in
SemSubtotais
Para aplicar: Obter Dados › Da Pasta (a lista de arquivos), Adicionar Coluna › Invocar Função Personalizada com o argumento [Folder Path] & [Name], e expandir a coluna de tabelas resultante. Para que um arquivo quebrado não derrube tudo, envolva a chamada em try fnTratarRelatorio(...) otherwise null.
Você já usou uma função sem perceber: o Combinar e Transformar do Exemplo 1.8 criou o grupo de consultas auxiliares da Figura 1.7, com o Parâmetro1 (o arquivo de exemplo), a função Transformar Arquivo e a consulta Transformar Arquivo de Exemplo. Para mudar o tratamento de todos os arquivos da pasta, edite a consulta Transformar Arquivo de Exemplo; a função e o resultado se ajustam sozinhos.
Outras fontes
- Bancos de dados (Obter Dados › De Banco de Dados, ou ODBC em De Outras Fontes):
Sql.Database("servidor", "Banco")para SQL Server; PostgreSQL exige o provedor Npgsql. Com banco, o Power Query tenta traduzir os cliques em SQL e mandar o trabalho para o servidor (dobra de consulta, ou query folding): filtre e agrupe cedo na receita. Também dá para escrever o SQL direto, nas opções avançadas ou comValue.NativeQuery. - Web e SharePoint:
Web.Contents("https://...")lê um arquivo publicado num endereço;SharePoint.FileseSharePoint.Contentsleem pastas de um site. O endereço é igual para todos, o que resolve o problema do caminho local; cada usuário precisa ter permissão de acesso. - Correspondência Difusa (Mesclar › Usar correspondência difusa): casa "Cia. Brasileira de Distribuição" com "CIA BRASILEIRA DISTRIBUICAO". O limite de similaridade padrão é 0,80 (1,00 = só exato); quanto menor, mais permissivo e mais falsos positivos. Uma tabela de transformação (de/para) ensina siglas.
- Power BI usa o mesmo Power Query, com a mesma linguagem M: uma consulta pode ser copiada do Excel e colada no Power BI. Aprender Power Query no Excel é aprender metade do Power BI.
Um assistente de IA escreve e revisa código M bem: descreva a tabela de entrada, a tabela que você quer na saída e peça o código, comentado. Cole numa Consulta Nula pelo Editor Avançado e confira as etapas uma a uma, com a qualidade de coluna ligada. Também vale colar uma consulta pronta e pedir que a IA a documente. O capítulo de IA trata desse fluxo.
Referências indicadas nos slides: o livro M is for (Data) Monkey, de Ken Puls e Miguel Escobar; o canal Curbal no YouTube; os grupos de Power BI e Power Query no LinkedIn; e o r/PowerBI. O melhor exercício é escolher um processo do seu trabalho que você refaz toda semana ou todo mês e montar a consulta dele.
1.9Exercícios resolvidos
Os exercícios da aula usam os arquivos da pasta de dados (CSVs e cadastros) e o arquivo de aula do professor, cujas abas mostram as consultas carregadas. O mini case usa o arquivo Case_Final.xlsx.
Exercício 1: importar e limpar fevereiro do zero
Tarefa: com o CSV vendas_fev2026_export.csv (mesma estrutura suja de janeiro), fazer o caminho completo: importar, remover as linhas-lixo do topo, promover cabeçalhos, configurar os tipos, tratar R$ e a vírgula decimal, padronizar Região, remover subtotais e Total Geral, validar com um Agrupar Por (soma do Total por Região) e carregar como Tabela.
Resolução. Ou se repetem os cliques dos Exemplos 1.2 a 1.5, ou se duplica a consulta de janeiro e se troca o nome do arquivo no Editor Avançado. A receita final:
let
Fonte = Csv.Document(File.Contents("C:\dados\vendas_fev2026_export.csv"),
[Delimiter=";", Columns=8, Encoding=65001]),
Topo = Table.Skip(Fonte, 3),
Cabecalhos = Table.PromoteHeaders(Topo),
SemTotais = Table.SelectRows(Cabecalhos,
each [Data] <> "Subtotal:" and [Data] <> "Total Geral:"),
Tipos = Table.TransformColumnTypes(SemTotais,
{{"Data", type date}, {"Quantidade", Int64.Type},
{"Preço Unitário", Currency.Type}, {"Total", Currency.Type}}, "pt-BR"),
Aparado = Table.TransformColumns(Tipos, {{"Produto", Text.Trim}, {"Região", Text.Trim}}),
Maiusc = Table.TransformColumns(Aparado, {{"Produto", Text.Proper}, {"Região", Text.Proper}}),
HDMI = Table.ReplaceValue(Maiusc, "Hdmi", "HDMI", Replacer.ReplaceText, {"Produto"}),
DeSom = Table.ReplaceValue(HDMI, "De Som", "de Som", Replacer.ReplaceText, {"Produto"})
in
DeSom
O arquivo tem 229 linhas. Saem 3 do topo, a do cabeçalho vira nomes de coluna e o filtro retira 4 subtotais e o Total Geral: sobram 220 vendas, de 01/02 a 28/02/2026. O R$ não precisa de Substituir Valores: a localidade resolve.
A validação pelo Agrupar Por (ou por uma tabela dinâmica sobre a consulta):
| Região | Vendas | Soma do Total (R$) |
|---|---|---|
| Centro-Oeste | 23 | 234.134,13 |
| Nordeste | 31 | 275.581,35 |
| Norte | 38 | 375.504,42 |
| Sudeste | 60 | 653.016,63 |
| Sul | 68 | 761.300,91 |
| Total | 220 | 2.299.537,44 |
Tabela 1.13. Exercício 1: soma do Total de fevereiro por Região.
Desafio extra: a consulta está pronta para março? Com a mesma estrutura, sim: basta trocar o arquivo. Com nomes de coluna ligeiramente diferentes (por exemplo, "Preco Unitario" sem acento), não: as etapas de tipo e de texto citam as colunas pelo nome, e a atualização para com o erro "A coluna 'Preço Unitário' da tabela não foi encontrada". As defesas são pedir ao sistema que não mude o layout, renomear as colunas numa etapa logo após a promoção de cabeçalhos e, no limite, ler as colunas pela posição.
Exercício 2: despivotar as metas
Tarefa: o arquivo metas_vendedores_2025.xlsx tem 15 vendedores nas linhas e 12 meses nas colunas. Importar, despivotar os 12 meses mantendo Vendedor e Região fixas, renomear Atributo para Mês e Valor para Meta, configurar Meta como Decimal e carregar como Tabela. Desafio: pivotar de volta e comparar com o original.
Resolução.
- Obter Dados › Do Excel › aba Metas_2025 › Transformar Dados.
- Remova a linha vazia do topo e promova os cabeçalhos.
- Selecione Vendedor e Região › Despivotar Outras Colunas. Aqui não há coluna de total, então nada precisa ser retirado antes.
- Renomeie as colunas e confira o tipo de Meta (Número Decimal).
= Table.UnpivotOtherColumns(Cabecalhos, {"Vendedor", "Região"}, "Mês", "Meta")
Resultado: 15 × 12 = 180 linhas, com meta anual total de R$ 30.208.290,81. A primeira vendedora, Ana Pereira (Sudeste), tem meta anual de R$ 2.027.411,39, com R$ 123.840,68 em janeiro.
Desafio extra. Selecione Mês › Transformar › Coluna Dinâmica, valores em Meta, Opções Avançadas › Não Agregar. Volta a matriz de 15 linhas por 14 colunas, com os mesmos valores. A diferença é cosmética: os meses podem sair em outra ordem e o formato da planilha original (título, linha vazia, cores) não volta, porque não é dado.
Exercício 3: mesclar vendas com o cadastro
Tarefa: com a consulta das vendas consolidadas da pasta, importar cad_vendedores.xlsx como Apenas Conexão, configurar os tipos, mesclar por id_vendedor com Externa esquerda, expandir nome_vendedor, regiao e gerente, filtrar nome nulo e identificar as linhas órfãs. Desafio: comparar com as junções Interna e Externa completa.
Resolução. É o passo a passo do Exemplo 1.9. A janela Mesclar informa 1.885 correspondências em 1.890 linhas. Depois de expandir, o filtro nome_vendedor = null deixa 5 linhas:
| data_venda | id_vendedor | id_produto | quantidade | valor_unitario | Receita (R$) |
|---|---|---|---|---|---|
| 15/03/2025 | 116 | 13 | 23 | 1.423,19 | 32.733,37 |
| 13/03/2025 | 116 | 12 | 1 | 508,47 | 508,47 |
| 15/07/2025 | 117 | 19 | 23 | 1.406,83 | 32.357,09 |
| 27/07/2025 | 117 | 33 | 26 | 1.421,11 | 36.948,86 |
| 06/11/2025 | 116 | 15 | 23 | 1.547,66 | 35.596,18 |
| Total | 138.143,97 |
Tabela 1.14. Exercício 3: as vendas sem correspondência no cadastro.
Desafio extra. A Interna devolve 1.885 linhas (descarta as 5 órfãs); a Externa esquerda e a Externa completa devolvem 1.890 (mantêm as órfãs com nome nulo). As duas últimas empatam aqui porque todos os 15 vendedores do cadastro venderam em 2025; se houvesse um vendedor sem vendas, só a Externa completa o mostraria. Para auditar o cadastro, a Externa completa é a escolha certa.
Mini case integrador: o relatório que se atualiza sozinho
Briefing. Você é analista numa rede varejista. Todo mês chega um arquivo de vendas (CSV), e há dois cadastros internos, de produtos e de vendedores, além das metas. A gerente quer um relatório de receita por Região × Categoria × Mês e quer poder atualizá-lo sozinha quando chegar o arquivo do mês seguinte.
Entregáveis: consultas do Power Query para Vendas, Produtos, Vendedores e Metas; uma tabela dinâmica final com Receita por Região, Categoria e Mês; e a capacidade de atualizar com um clique.
Checkpoint 1: importar.
- Num arquivo novo, importe
cad_produtos.xlsx(aba Produtos): remova as linhas que sobram no topo, promova cabeçalhos, confira os tipos. A colunanome_produtorepete a categoria ("Eletrônicos - Notebook A"); se quiser, divida por-. Carregue como Apenas Conexão, marcando Adicionar ao Modelo de Dados. - Importe
cad_vendedores.xlsxdo mesmo jeito (id_vendedorinteiro,data_admissaodata). - Conecte a pasta
vendas_2025com Combinar e Transformar Dados, renomeie a consulta para Vendas (o nome vai durar mais que 2025) e confira os 12 arquivos em Source.Name. Ajuste os tipos antes de qualquer transformação. - Crie a coluna Receita: selecione
quantidadeevalor_unitario(Ctrl+clique) › Adicionar Coluna › Padrão › Multiplicar e renomeie para Receita. O tipo resultante é decimal, 100% válido. - Valide com um Agrupar Por rápido (por exemplo, soma da Receita por
id_produto) e depois exclua essa etapa.
= Table.AddColumn(Tipos, "Receita", each [quantidade] * [valor_unitario], type number)
Checkpoint 2: combinar.
- Importe e despivote as metas (Exercício 2), como Apenas Conexão.
- Na consulta Vendas, Mesclar Consultas como Novas com Produtos, por
id_produto, Externa esquerda: as 1.890 linhas encontram produto. Expandacategoria,subcategoriaenome_produto, sem prefixo. - Na nova consulta, mescle com Vendedores por
id_vendedor, Externa esquerda, e expandanome_vendedor,regiaoegerente. As 5 órfãs do Exercício 3 continuam aqui, com região nula. - Renomeie a consulta final (por exemplo, Vendas_Enriquecida) e carregue para o Excel.
Checkpoint 3: entregar.
- Tabela dinâmica sobre Vendas_Enriquecida:
regiaoecategorianas linhas,data_vendanas colunas (botão direito › Agrupar por Meses e Anos, tirando Dias), Soma de Receita nos valores. - Formate os valores, tire o ajuste automático de largura das colunas (Opções da Tabela Dinâmica) e, para facilitar a leitura, insira segmentações de dados (slicers) de Região, Categoria e Vendedor.
- Teste final: copie
vendas_2026_01.csvpara a pastavendas_2025e clique em Dados › Atualizar Tudo.
Resultado em 2025. A receita do ano soma R$ 24.933.953,18. A região é a do cadastro do vendedor; as 5 vendas órfãs aparecem como "(vazio)", com R$ 138.143,97, e o total continua completo.
| Região | Casa | Eletrônicos | Esporte | Livros | Vestuário | Total |
|---|---|---|---|---|---|---|
| Centro-Oeste | 643.816,65 | 921.585,51 | 997.375,17 | 1.327.952,49 | 1.105.939,37 | 4.996.669,19 |
| Nordeste | 752.337,33 | 762.572,36 | 1.007.663,40 | 909.401,32 | 1.217.099,29 | 4.649.073,70 |
| Norte | 694.749,34 | 713.785,74 | 971.028,43 | 1.188.197,28 | 1.405.007,80 | 4.972.768,59 |
| Sudeste | 536.112,82 | 953.291,18 | 1.082.680,73 | 924.969,38 | 1.126.605,43 | 4.623.659,54 |
| Sul | 608.587,14 | 1.015.857,94 | 1.241.447,59 | 1.522.301,92 | 1.165.443,60 | 5.553.638,19 |
| (vazio) | 36.948,86 | 101.195,11 | 138.143,97 | |||
| Total | 3.235.603,28 | 4.367.092,73 | 5.337.144,18 | 5.872.822,39 | 6.121.290,60 | 24.933.953,18 |
Tabela 1.15. Mini case: receita de 2025 por Região e Categoria (R$). O Sul lidera; Vestuário é a maior categoria.
O teste do Atualizar. O arquivo de janeiro de 2026 tem 160 vendas. Depois do Atualizar Tudo, a consulta passa a ter 2.050 linhas e a tabela dinâmica ganha a coluna de janeiro de 2026, com R$ 1.858.003,00. O total geral vai a R$ 26.791.956,18. Nenhuma etapa foi editada.
Se a tabela dinâmica agrupar a data só por Meses, as vendas de janeiro de 2026 caem na mesma coluna de janeiro de 2025, e o relatório parece não ter mudado. Inclua Anos no agrupamento.
Debrief. Pontos que o case costuma revelar: o tipo de coluna aparece como problema logo no Checkpoint 1 (e é tratado ali, antes de tudo); a mesclagem mostra uma lacuna de cadastro que estava invisível nas planilhas; e o teste final mostra o ganho real, o relatório do mês seguinte em alguns segundos. O que fica fora do Power Query é baixar o arquivo do sistema e salvá-lo na pasta, etapa que o capítulo de IA mostra como automatizar.
As consultas carregadas no Modelo de Dados também podem ser relacionadas sem Mesclar. Ative o suplemento Microsoft Power Pivot for Excel (Arquivo › Opções › Suplementos › Gerenciar: Suplementos COM), abra Gerenciar Modelo de Dados, vá à Exibição de Diagrama e arraste id_vendedor de Vendas sobre id_vendedor de Vendedores (e o mesmo com id_produto). Uma tabela dinâmica criada a partir do Modelo de Dados mostra campos de todas as tabelas. Para o case, o resultado é o mesmo da tabela mesclada.
- Power Query é uma ferramenta de ETL: extrai, transforma e carrega. O Atualizar reexecuta a receita inteira.
- Pense em receita, não em resultado: as Etapas Aplicadas automatizam e documentam o processo ao mesmo tempo.
- Trate os dados dentro da consulta, nunca na planilha carregada: o Atualizar desfaz correções manuais.
- Ordem de ouro: remover linhas que sobram, promover cabeçalhos, configurar tipos; só então o resto.
- Usando Localidade (Português do Brasil) converte datas, quantidades e valores no padrão brasileiro. Sem ela, parte das datas troca dia e mês sem aviso.
- Filtre subtotais e totais em vez de remover linhas pela posição, e recalcule os totais você mesmo.
- O Power Query diferencia maiúsculas: padronize textos (Aparar, Cada Palavra em Maiúscula, Substituir) antes de agrupar ou mesclar.
- Carregue como Apenas Conexão o que é intermediário; use Atualizar Tudo para levar as tabelas dinâmicas junto.
- Despivotar Outras Colunas converte o formato largo em longo; tire as colunas de total antes.
- Acrescentar empilha tabelas de mesma estrutura; a pasta com Combinar e Transformar consolida todos os arquivos e inclui o próximo sozinha.
- Mesclar é o PROCV do Power Query: Externa esquerda é o padrão, e é preciso expandir a coluna nova. A contagem de correspondências revela lacunas de cadastro.
1.10Exercícios propostos
Use os arquivos da pasta de dados da aula.
- No CSV de janeiro tratado, use Agrupar Por para calcular a quantidade vendida e o total por Produto. Qual produto tem o maior total?
- Ainda em janeiro, quantas vendas e qual total cada vendedor teve? Quem vendeu mais?
- Na consulta de fevereiro, imagine que você aplicou Colocar Cada Palavra em Maiúscula e esqueceu a etapa de Substituir Valores. Quais valores da coluna Produto ficam diferentes dos de janeiro, e o que acontece se você acrescentar as duas consultas e agrupar por Produto?
- Despivote o orçamento sem remover a coluna Total Anual. Quantas linhas a consulta tem e quanto soma a coluna de valores? Qual etapa você acrescentaria, depois do despivotar, para corrigir sem voltar atrás?
- No orçamento despivotado, qual é o orçamento total de cada categoria? E qual mês tem o maior orçamento?
- Mescle a consulta das vendas de 2025 com o cadastro de vendedores usando a junção Anti esquerda. Quantas linhas sobram? Para que serve essa consulta numa rotina mensal?
- Com as vendas de 2025 já mescladas com o cadastro de vendedores, agrupe a Receita por
nome_vendedore mescle o resultado com as metas despivotadas (agrupadas por Vendedor). Qual vendedor ficou acima da meta anual? - Crie uma Coluna Personalizada com o primeiro dia do mês da data da venda (
Date.StartOfMonth) nas vendas de 2025. Quantos valores distintos ela tem? Por que essa coluna resolve o problema da ordem dos meses?
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 3 · Automatização · Capítulo 2
Automatização com VBA
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →Um modelo bem construído resolve metade do problema. A outra metade é o trabalho manual que sobra para mantê-lo vivo: copiar um valor de um lugar para outro, estender uma fórmula até a última linha, gerar o mesmo relatório para cada um dos 70 clientes, refazer um gráfico série por série. O Power Query, visto no capítulo anterior, cuida de trazer e tratar os dados. O VBA (Visual Basic for Applications) cuida das rotinas que acontecem dentro da pasta de trabalho: é a linguagem de programação do Excel, e cada rotina escrita nela é uma macro.
O objetivo do capítulo não é formar um programador. VBA é uma linguagem inteira, e ninguém sai especialista dela em uma aula. O objetivo é entender como uma macro funciona, saber ler e ajustar um código, e reconhecer que tipo de problema vale resolver com VBA. Com isso, você grava uma macro, lê o que o Excel escreveu, acrescenta um laço ou uma condição e transforma uma tarefa de uma hora em um clique. Também fica preparado para pedir código a um assistente de IA e, principalmente, para conferir o que ele entregou.
- Habilitar a guia Desenvolvedor, gravar, executar e editar uma macro, e salvar o arquivo no formato
.xlsm. - Abrir arquivos com macros com segurança.
- Navegar pelo editor do VBA: módulos, janela de código, execução passo a passo e inspeção de variáveis.
- Declarar variáveis com os tipos Integer, Long, Double, String e Boolean.
- Criar funções próprias (Function) e usá-las na planilha como qualquer função do Excel.
- Controlar o fluxo do código com If/ElseIf/Else, Do While/Loop e For...Next.
- Ler e escrever células com Range e Cells e escrever fórmulas pela macro.
- Montar automações de relatório: um arquivo por cliente, Atingir Meta em lote e gráficos série a série.
2.1Macros e a guia Desenvolvedor
Uma macro é uma receita: uma sequência de passos que o Excel executa sozinho, na ordem, sempre do mesmo jeito. Os comandos para criar e executar macros ficam na guia Desenvolvedor, que vem desligada. Para exibi-la: Arquivo › Opções › Personalizar Faixa de Opções, marque Desenvolvedor na lista de guias principais e confirme.
O jeito mais rápido de começar uma macro é gravá-la. Com a gravação ligada, o Excel transforma em código tudo o que você faz na planilha: cada clique, cada seta, cada Ctrl+C. Não há pressa: se você não faz nada, nada é gravado. Mas também não há filtro: um passeio inútil pela planilha vira linhas inúteis de código.
Situação: a Atividade 1 da aba Codigos pede que o valor de C4 (1.000) vá para C5.
- Desenvolvedor › Gravar Macro. Nome:
Copia_e_Cola. Tecla de atalho: em branco. Armazenar em: Esta pasta de trabalho. Descrição: "Copia o valor de C4 e cola em C5". OK. - Clique em C4, Ctrl+C, clique em C5, Ctrl+V.
- Desenvolvedor › Parar Gravação.
- Apague C5 e rode a macro em Desenvolvedor › Macros (Alt+F8) ›
Copia_e_Cola› Executar. O valor 1.000 reaparece em C5.
Abrindo o editor (Alt+F11), em Módulos › Módulo1, está o que o Excel escreveu:
Sub Copia_e_Cola()
'
' Copia o valor de C4 e cola em C5
'
Range("C4").Select
Selection.Copy
Range("C5").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
Toda macro começa com Sub, o nome e um par de parênteses vazio, e termina com End Sub. As linhas em verde, que começam com apóstrofo, são comentários: o VBA ignora o texto depois do '. Se você tivesse clicado em outras células antes de C4, cada clique apareceria como uma linha Range("...").Select sem utilidade, que pode ser apagada.
O nome precisa começar por letra e não pode ter espaços (use _). Também não pode coincidir com um endereço de célula: M1 ou ABC123 são recusados, porque existem células com esses nomes. Macro1 ou Copia_e_Cola funcionam.
Onde guardar e como executar
A janela Gravar Macro oferece três destinos:
- Esta pasta de trabalho: a macro fica no arquivo e viaja com ele. É o padrão para automações de um modelo específico.
- Pasta de trabalho pessoal de macros: um arquivo especial (
PERSONAL.XLSB) que o Excel abre em segundo plano sempre que é iniciado. Uma macro guardada ali pode ser usada em qualquer arquivo do seu computador, mas não vai junto quando você envia uma planilha a alguém. - Nova pasta de trabalho: cria um arquivo novo para receber a macro.
O professor não recomenda atalhos de teclado para macros. Já existem muitos atalhos no Excel e no Windows, e é fácil sobrescrever um que você usa sem saber. Uma macro de uso frequente costuma pertencer a um contexto, e aí o melhor é um botão: Inserir › Formas, desenhe a forma, clique nela com o botão direito › Atribuir Macro e escolha a macro. Com a macro atribuída, o clique esquerdo executa a rotina; para selecionar, copiar ou mover o botão, use o botão direito.
Gravar é a forma mais rápida de descobrir o código de qualquer coisa que o Excel faz pela interface: formatar uma célula, inserir um gráfico, colar valores. O roteiro do curso é sempre o mesmo: grave a ação uma vez, leia o código, apague o que não serve e acrescente o que a gravação não sabe fazer, como repetir a ação em várias linhas (laço) ou decidir entre duas ações (condição).
Ao parar uma gravação, o Excel do Microsoft 365 pode avisar que a macro também foi salva como Office Script, na guia Automatizar. Os scripts são uma alternativa mais recente, feita para o Excel na web e para o Power Automate. O VBA é mais antigo, só roda no Excel instalado no computador e tem muito mais possibilidades. O curso trabalha com VBA.
2.2Segurança e o formato .xlsm
Ao salvar o arquivo do Exemplo 2.1, o Excel avisa que os recursos de VB Project não podem ser salvos numa pasta de trabalho sem macros. O motivo: o formato padrão, .xlsx, não guarda macros. Uma macro é um programa e pode fazer quase qualquer coisa no computador: apagar arquivos, enviar e-mails, baixar outros programas. Se todo arquivo de Excel pudesse carregar código, qualquer planilha recebida seria um risco. Por isso o código só fica num formato próprio:
| Formato | Macros | Uso |
|---|---|---|
.xlsx |
Não | Padrão. Ao salvar um arquivo com macros nesse formato, o código é descartado |
.xlsm |
Sim | Pasta de trabalho habilitada para macro |
.xlsb |
Sim | Formato binário; arquivos menores. É o formato da pasta pessoal de macros |
Tabela 2.1. Formatos e macros. Para converter, use F12 (Salvar Como) e escolha "Pasta de Trabalho Habilitada para Macro do Excel".
Ao abrir um .xlsm, o Excel não executa as macros de imediato. O que ele mostra depende da origem do arquivo.
Habilite macros apenas de arquivos cuja origem você conhece e cujo conteúdo faz sentido. Desconfie de um .xlsm inesperado, mesmo vindo de um contato conhecido, e de planilhas que pedem para habilitar conteúdo antes de mostrar qualquer dado. Na dúvida, abra o editor e leia o código: comandos como Shell, CreateObject, Kill ou endereços da internet merecem atenção. As regras da empresa (Central de Confiabilidade, locais confiáveis) prevalecem sobre a preferência individual.
2.3O editor do VBA
O editor (VBE, Visual Basic Editor) abre com Alt+F11 ou Desenvolvedor › Visual Basic. Assim como o Power Query, é um ambiente separado da planilha. Vale organizar a tela com o Excel de um lado e o editor do outro: você executa uma linha e já vê o efeito na planilha.
Na janela Projeto, cada arquivo aberto aparece como um VBAProject com duas pastas:
- Microsoft Excel Objetos: uma entrada por aba e a
EstaPastaDeTrabalho. O código colocado aqui responde a eventos daquela aba ou do arquivo (seção 2.12). - Módulos: onde ficam as macros e as funções. A gravação cria um módulo automaticamente. Para começar do zero, clique com o botão direito no projeto › Inserir › Módulo. É o lugar certo para quase todo o código do curso.
O VBA verifica cada linha ao sair dela. Uma palavra digitada errada (Funtion no lugar de Function) fica em vermelho e gera aviso de erro de sintaxe. O editor também padroniza maiúsculas: digite dim e ele escreve Dim, um sinal de que reconheceu o comando.
| Tecla | O que faz |
|---|---|
| F5 | Executa a macro em que está o cursor (até o fim ou até um ponto de interrupção) |
| F8 | Executa uma linha por vez (passo a passo); a próxima linha fica destacada em amarelo |
| F9 | Liga ou desliga um ponto de interrupção (bolinha vermelha) na linha atual |
| Botão direito › Adicionar inspeção | Mostra o valor de uma variável na janela Inspeções enquanto a macro roda |
| Ctrl+Break ou Esc | Interrompe uma macro em execução (por exemplo, presa num laço infinito) |
Tabela 2.2. Executar e depurar no editor. Em notebooks, a tecla Break pode exigir Fn.
2.4Variáveis e tipos
Uma variável é um espaço com nome que guarda um valor enquanto a macro roda, como uma célula que só existe dentro do código. Um código organizado tem dois momentos separados: a declaração, que diz que a variável existe e qual o seu tipo, e a inicialização, que dá a ela o primeiro valor.
Dim linha As Integer ' declaração
linha = 5 ' inicialização
| Tipo | Guarda | Faixa |
|---|---|---|
Integer |
Números inteiros | −32.768 a 32.767 |
Long |
Números inteiros grandes | cerca de −2,1 bilhões a +2,1 bilhões |
Double |
Números com casas decimais | até ±1,79 × 10308 |
String |
Texto | — |
Boolean |
Verdadeiro ou falso | True / False |
Variant |
Qualquer coisa | Flexível, porém mais lento e sujeito a erros |
Tabela 2.3. Principais tipos de variável, como na aba Conceitos do arquivo de macros da aula.
A escolha segue o conteúdo: um contador de linhas que vai até 1.000 é Integer; um código de produto como 220686 já estoura o Integer e pede Long; uma receita, uma taxa ou um preço pedem Double; um nome, String. O slide usa prefixos que indicam o escopo e o tipo: li_ (local, Integer), ll_ (Long), ld_ (Double), ls_ (String), lb_ (Boolean). O "l" quer dizer local: a variável existe só dentro daquela macro. Variáveis declaradas no topo do módulo, fora de qualquer Sub, valem para todas as macros do módulo.
Sub Variaveis()
Dim numeros_inteiros As Integer
Dim numeros_inteiros_grandes As Long
Dim numeros_decimais As Double
Dim texto As String
Dim verdadeiro_falso As Boolean
numeros_inteiros = 10
numeros_inteiros_grandes = 1000000000
numeros_decimais = 10.1 ' no código, o separador decimal é o ponto
texto = "dez" ' texto entre aspas duplas
verdadeiro_falso = True
End Sub
Dentro do código, número decimal usa ponto (0.02), qualquer que seja a configuração do Windows. O slide escreve 10,5 na tabela de exemplos, mas no editor isso dá erro. Outro cuidado: o VBA aceita variáveis não declaradas, e um erro de digitação (linah no lugar de linha) cria uma variável nova e vazia sem aviso. Escrever Option Explicit na primeira linha do módulo obriga a declarar tudo e faz o editor apontar esses erros.
O VBA conversa com as células por meio de Cells(linha, coluna), que a seção 2.9 detalha. O exemplo da aba Conceitos mostra as operações básicas.
A célula C29 contém 10. A macro calcula cinco resultados e os grava logo abaixo:
Sub Celulas()
Cells(30, 3) = Cells(29, 3) + 100
Cells(31, 3) = Cells(29, 3) - 100
Cells(32, 3) = Cells(29, 3) / 100
Cells(33, 3) = Cells(29, 3) * 100
Cells(34, 3) = Cells(29, 3) ^ 10
End Sub
Resultado: C30 = 110; C31 = −90; C32 = 0,1; C33 = 1.000; C34 = 10.000.000.000. A macro grava valores, não fórmulas: se C29 mudar, os resultados só se atualizam quando a macro roda de novo.
2.5Funções
Além das macros (Sub), o VBA cria funções (Function): rotinas que recebem argumentos e devolvem um valor. Uma função salva num módulo aparece na planilha como qualquer função do Excel, no autocompletar e no botão fx.
Function NomeDaFuncao(aParam1 As Tipo, ..., aParamN As Tipo) As Tipo
' corpo da função
NomeDaFuncao = valor_de_retorno
End Function
A estrutura tem três partes: os parâmetros entre parênteses, cada um com seu tipo; o tipo do resultado, depois dos parênteses; e a linha que atribui o resultado ao nome da própria função. Sem essa linha, a função devolve zero.
Enunciado: calcular o saldo final de um capital aplicado a juros simples, com a taxa digitada em percentual (5 = 5%).
Function JurosSimples(aCapitalInicial As Double, aTaxa As Double, _
aNMeses As Integer) As Double
Dim ld_CapitalAcrescido As Double
ld_CapitalAcrescido = aCapitalInicial * (aTaxa / 100) * aNMeses
JurosSimples = aCapitalInicial + ld_CapitalAcrescido
End Function
O sublinhado no fim da primeira linha (_) continua a instrução na linha seguinte, só para facilitar a leitura. Na planilha, =JurosSimples(D9;D10;D11) com 100, 5 e 2 devolve:
100 + 100 × 5/100 × 2 = 100 + 10 = 110
O arquivo de macros da aula traz a mesma conta numa linha, sem tipos declarados: Juros_Simples = saldo_inicial * (1 + (taxa_juros / 100) * meses). Funciona igual; sem os tipos, os parâmetros viram Variant.
Uma função VBA usada em célula segue as regras do Excel em português: argumentos separados por ;. Ao digitar o nome, o Excel não mostra a dica dos argumentos como faz com as funções nativas; clique no fx, ao lado da Barra de Fórmulas, para ver os nomes dos parâmetros. Se o código da função mudar, selecione a célula e tecle F2 e Enter para recalcular.
A LAMBDA, vista em Modelagem, também cria funções com nome dentro da planilha, sem macro e sem .xlsm. Antes dela, a Function do VBA era o único caminho. Hoje, para cálculos que cabem numa fórmula, a LAMBDA costuma ser mais prática. A Function continua útil quando o cálculo precisa de laços, de várias etapas com variáveis intermediárias ou de lógica difícil de escrever numa fórmula.
2.6Condicionais: If, ElseIf, Else
O If faz o código decidir, como o SE faz numa fórmula:
If condição Then
comandos se verdadeiro
ElseIf outra_condição Then
comandos se a segunda for verdadeira
Else
comandos se nenhuma for verdadeira
End If
Os blocos ElseIf são opcionais e podem ser quantos forem necessários. O VBA testa de cima para baixo e executa só o primeiro bloco verdadeiro; o resto é ignorado. Todo If de várias linhas termina com End If.
O slide propõe a função TaxaProgressiva1: o banco paga 2% ao mês para saldos inferiores a R$ 10.000,00 e 3% acima disso, e a função devolve o saldo ao fim de um mês.
Function TaxaProgressiva1(aSaldo As Double) As Double
Dim ld_Taxa As Double
If aSaldo < 10000 Then
ld_Taxa = 0.02
Else
ld_Taxa = 0.03
End If
TaxaProgressiva1 = aSaldo * (1 + ld_Taxa)
End Function
Com 9.999, o teste é verdadeiro e o resultado é 9.999 × 1,02 = 10.198,98. Com 10.001, vale o Else: 10.001 × 1,03 = 10.301,03.
O enunciado fala em saldo "inferior a" e "superior a" R$ 10.000,00 e não diz o que acontece no valor exato. O código do slide usa aSaldo < 10000, então 10.000 cai no Else e recebe 3% (10.300). Em aula, o professor escreveu o teste ao contrário (aSaldo > 10000 para 3%) e, de forma conservadora, deixou 10.000 com 2% (10.200). As duas leituras são possíveis; o que importa é que o limite fique explícito no código. Em regras de negócio, sempre confira de que lado do limite cai o valor exato.
No arquivo de macros da aula, a versão com três faixas recebe os limites e as taxas como argumentos, em vez de deixá-los fixos no código:
Function Taxa_Progressiva_1(saldo_inicial, limite1, taxa1, _
limite2, taxa2, taxa3)
If saldo_inicial > limite1 Then
Taxa_Progressiva_1 = saldo_inicial * (1 + taxa1)
ElseIf saldo_inicial > limite2 Then
Taxa_Progressiva_1 = saldo_inicial * (1 + taxa2)
Else
Taxa_Progressiva_1 = saldo_inicial * (1 + taxa3)
End If
End Function
Na aba Functions: saldo 1.000, limite 1 = 10.000 (taxa 10%), limite 2 = 5.000 (taxa 5%), taxa 3 = 3%. A fórmula =Taxa_Progressiva_1(D23;D25;D26;D27;D28;D29) devolve 1.030, e a taxa utilizada (=D31/D23-1) é 3%. Com saldo 7.000, o primeiro teste falha e o segundo passa: 7.350. A ordem importa: começando pelo limite menor, um saldo de 20.000 pararia no teste de 5.000 e receberia 5%.
Deixar os parâmetros na planilha segue a mesma boa prática das fórmulas: para mudar a regra, muda-se uma célula, não o código.
2.7Laços: Do While e For...Next
Um laço repete um bloco de comandos. O Do While repete enquanto uma condição for verdadeira:
Do While condição
comandos
Loop
A condição é testada no início de cada volta. Quando ela fica falsa, o código segue para a linha depois do Loop. Por isso, algum comando dentro do laço precisa mudar a condição, em geral um contador que avança. Sem ele, a condição nunca fica falsa e o Excel trava num laço infinito.
Ao escrever um Do While, o professor escreve de uma vez o Do While, o Loop, a variável do critério e a linha que a faz andar (linha = linha + 1). Só depois preenche o meio. Outra armadilha comum é inicializar uma variável dentro do laço: a cada volta ela é zerada, e um saldo ou uma soma nunca acumula. Inicialização vai antes do Do While.
O slide propõe juros compostos com taxa crescente: 2% no primeiro mês, 2,1% no segundo, e assim por diante, até 3% no 11º mês.
Function JurosProgr(aCapIni As Double, aTaxaIni As Double, _
aIncrTaxaMensal As Double, aNMeses As Integer) As Double
Dim li_Mes As Integer 'Número de meses desde o início
Dim ld_TaxaAtual As Double 'Taxa do mês corrente
Dim ld_CapAtual As Double 'Capital ao final do mês corrente
ld_CapAtual = aCapIni
ld_TaxaAtual = aTaxaIni
li_Mes = 1
'Malha principal
Do While li_Mes <= aNMeses
ld_CapAtual = ld_CapAtual * (1 + ld_TaxaAtual)
li_Mes = li_Mes + 1
ld_TaxaAtual = ld_TaxaAtual + aIncrTaxaMensal
Loop
JurosProgr = ld_CapAtual
End Function
Dados: capital 1.000, taxa inicial 2%, incremento 0,1% ao mês, 10 meses.
A cada volta, o saldo é atualizado com a taxa do mês e só depois a taxa sobe:
| Mês | Taxa do mês | Saldo no fim do mês |
|---|---|---|
| 1 | 2,0% | 1.020,00 |
| 2 | 2,1% | 1.041,42 |
| 3 | 2,2% | 1.064,33 |
| 4 | 2,3% | 1.088,81 |
| 5 | 2,4% | 1.114,94 |
| 6 | 2,5% | 1.142,82 |
| 7 | 2,6% | 1.172,53 |
| 8 | 2,7% | 1.204,19 |
| 9 | 2,8% | 1.237,90 |
| 10 | 2,9% | 1.273,80 |
| 11 | 3,0% | 1.312,02 |
Tabela 2.4. Evolução da função JurosProgr. Com aNMeses = 10, o laço para no mês 10.
Resultado: =JurosProgr(D34;D35;D36;D37) com 10 meses devolve 1.273,80. O enunciado do slide vai até o 11º mês (taxa de 3%); para reproduzi-lo, use 11 meses: 1.312,02.
O ponto de partida do contador e o operador andam juntos. Começando em li_Mes = 1, o teste é <=; começando em 0, o teste precisa ser <. Em aula, o professor começou em 0 com <= e a função calculou um mês a mais, um erro típico de laço que o modo passo a passo (F8) revela na hora.
For...Next e With
Quando o número de voltas é conhecido, o For...Next é mais compacto: ele declara o início, o fim e faz o contador andar sozinho.
Dim x As Integer
For x = 1 To 10
If x = 5 Then
MsgBox "x é igual a 5"
End If
Next x
A estrutura With evita repetir o mesmo objeto em várias linhas. Tudo o que começa com ponto dentro do bloco se refere ao objeto do With:
With ThisWorkbook.Sheets("Algoritmos")
.Cells(14, 3) = 18950
.Range("C14").Font.Bold = True
End With
Sub Do_while_loop_linhas()
Dim linha As Integer
linha = 5
Do While linha < 1005
Cells(linha, 2) = linha - 4
linha = linha + 1
Loop
End Sub
Resultado: B5:B1004 recebe a sequência de 1 a 1.000. A versão Do_while_loop_colunas faz o mesmo na horizontal, de D5 (coluna 4) até ALO5 (coluna 1.003). Com dois laços, um dentro do outro, Do_while_loop_linhas_colunas preenche o bloco D8:CY107 (100 linhas × 100 colunas) com os números de 1 a 10.000, coluna por coluna: o laço de fora avança a coluna e, a cada coluna, o de dentro percorre as linhas 8 a 107.
A mesma tarefa com For...Next: For linha = 5 To 1004: Cells(linha, 2) = linha - 4: Next linha.
Laço com condição: o If dentro do Do While
Juntando as duas estruturas, o código percorre um intervalo e decide o que fazer com cada célula.
Situação: a grade C10:Q39 tem 450 nomes. Os nomes iguais ao de C5 (Alan) devem ficar azul-claro; os iguais ao de C6 (Felipe), azul-petróleo; os demais, cinza.
Sub nomes()
Dim linha As Integer
Dim coluna As Integer
coluna = 3
Do While coluna <= 17
linha = 10
Do While linha <= 39
If Cells(linha, coluna) = Cells(5, 3) Then
Cells(linha, coluna).Interior.Color = 15261367
ElseIf Cells(linha, coluna) = Cells(6, 3) Then
Cells(linha, coluna).Interior.Color = 10192433
Else
Cells(linha, coluna).Interior.Color = 12566463
End If
linha = linha + 1
Loop
coluna = coluna + 1
Loop
End Sub
linha = 10 está dentro do laço das colunas, de propósito: a cada coluna nova, a contagem de linhas recomeça. Os números em Interior.Color são cores no formato do VBA, que se obtêm gravando uma macro que pinta uma célula.
Resultado: 15 células com Alan, 5 com Felipe e 430 em cinza. As três células com "Allan" ficam cinza: a comparação é exata.
2.8Sub-rotinas e interação com o usuário
Uma Sub é uma rotina que executa ações e não devolve valor. A macro é uma Sub sem parâmetros, e por isso aparece na lista de macros. Uma Sub com parâmetros não aparece na lista: ela é chamada por outra rotina, com Call NomeSub(arg1, arg2), como a sub-rotina de e-mail da seção 2.11.
Duas funções fazem a macro conversar com quem a executa:
- InputBox abre uma janela com uma caixa de texto e devolve o que foi digitado, sempre como texto. Para usar como número, converta:
CInt(para Integer),CLng(Long),CDbl(Double). - MsgBox mostra uma mensagem. Para juntar texto e variável, use
&, como numa fórmula.
li_Nprods = CInt(InputBox("Entre a quantidade de produtos:"))
ld_Preco1 = CDbl(InputBox("Preço do primeiro produto"))
MsgBox "O melhor preço é: " & ld_Preco1
Sub SomaNum()
Dim ld_Soma As Double
Dim li_Cont As Integer
Dim ld_Valor As Double
ld_Soma = 0
li_Cont = 0
ld_Valor = 0
Do While li_Cont < 4
ld_Valor = CDbl(InputBox("Entre com o valor"))
ld_Soma = ld_Soma + ld_Valor
li_Cont = li_Cont + 1
Loop
MsgBox "A soma é: " & ld_Soma
End Sub
Digitando 100, 100, 100 e 200, a mensagem final é A soma é: 500. O contador começa em 0 e o teste é < 4: quatro voltas. O resultado não fica gravado em lugar nenhum; aparece na janela e some. Para depurar, marque o Do While com F9, adicione inspeções para as três variáveis e execute com F5: a macro para no laço e, a cada F8, a janela Inspeções mostra o contador e a soma evoluindo.
O professor usa o MsgBox para avisar que um processo terminou, de preferência com alguma informação útil: "34 linhas preenchidas", "70 relatórios gerados". Uma macro que roda em silêncio deixa a dúvida se ela fez tudo. Melhor ainda é avisar também quando algo deu errado, e onde.
2.9Objetos: Workbook, Worksheet, Range e Cells
O VBA enxerga o Excel como uma hierarquia de objetos: o aplicativo contém pastas de trabalho (Workbook), que contêm planilhas (Worksheet), que contêm intervalos (Range). Cada objeto tem propriedades (o valor, a cor, a fórmula) e métodos (copiar, selecionar, salvar), escritos depois de um ponto.
Dim livro As Workbook
Set livro = ThisWorkbook ' o arquivo onde está o código
Dim aba As Worksheet
Set aba = ThisWorkbook.Sheets("Codigos") ' uma aba desse arquivo
Dim nome As String
nome = aba.Range("C9") ' "Wally"
nome = aba.Cells(9, 3) ' a mesma célula
Variáveis que guardam objetos são atribuídas com Set. ThisWorkbook é sempre o arquivo que contém a macro; ActiveWorkbook e ActiveSheet são o arquivo e a aba que estão ativos na tela, o que muda conforme o usuário clica. Sem indicar a aba, Range e Cells se referem à aba ativa.
| Ação | Comando |
|---|---|
| Ler ou gravar o valor de uma célula | valor = Cells(i, j) / Range("C5") = 14 |
| Linha ou coluna inteira | Rows(i) / Columns(j) |
| Intervalo | Range("A1:Z60000") |
| Célula de outra aba | Worksheets("Lista").Cells(i, j) |
| Ativar outra aba | Worksheets("Lista").Select |
| Adicionar ou excluir abas | Sheets.Add / Sheets("Aba1").Delete |
| Copiar uma aba | Sheets("Automacao_1").Copy Before:=Sheets(9) |
| Renomear uma aba | ActiveSheet.Name = "Cliente 1" |
Tabela 2.5. Principais comandos com objetos.
A gravação produz pares como Range("C4").Select / Selection.Copy, porque reproduz cliques. O Excel não precisa selecionar nada para trabalhar: Range("C5") = Range("C4") faz a cópia do valor numa linha, sem a tela pular de um lado para o outro. Ao limpar um código gravado, troque seleções por referências diretas sempre que possível, e teste a cada troca com F8. Em aula, uma tentativa de simplificar Copy/Paste quebrou a macro: limpar código exige testar.
Vetores e matrizes
Uma variável comum guarda um valor. Um vetor guarda uma fila de valores, como um intervalo de uma coluna; uma matriz, uma tabela.
Dim trimestre(1 To 4) As Double ' vetor com 4 posições
Dim tabela(1 To 8, 1 To 4) As Double ' matriz de 8 linhas × 4 colunas
trimestre(1) = Cells(14, 3) ' guarda o total do 1º trimestre
Ler uma base inteira para uma matriz, trabalhar na memória e devolver o resultado de uma vez é muito mais rápido do que ler e gravar célula a célula. É o recurso das macros que lidam com dezenas de milhares de linhas.
2.10Fórmulas escritas pela macro
Uma macro pode gravar um valor ou uma fórmula. Basta atribuir à célula um texto que começa com =:
| Propriedade | Exemplo | Observação |
|---|---|---|
.Formula |
Range("C14").Formula = "=SUM(C6:C13)" |
Endereços no estilo A1 |
.FormulaR1C1 |
Range("C14").FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)" |
Endereços relativos à célula; é o que a gravação produz |
.FormulaArray |
Range("G6").FormulaArray = "=..." |
Fórmula matricial antiga (Ctrl+Shift+Enter) |
WorksheetFunction |
Cells(14, 3) = Application.WorksheetFunction.Sum(Range("C6:C13")) |
Calcula no VBA e grava só o valor |
Tabela 2.6. Formas de inserir fórmulas e cálculos pela macro.
.Formula e .FormulaR1C1 esperam a fórmula como no Excel em inglês: nomes em inglês (SUM, VLOOKUP, XLOOKUP) e argumentos separados por vírgula, mesmo num Excel em português. Na planilha, o resultado aparece traduzido (=SOMA(C6:C13)). Para escrever em português, existe .FormulaLocal, que depende do idioma de quem roda a macro. Texto dentro da fórmula vai com aspas duplicadas: o "" da fórmula =PROCX(D36;B22:B32;C22:C32;"") vira """" dentro da string do VBA.
O jeito mais seguro de acertar a sintaxe é o que o slide recomenda: escreva a fórmula na planilha, ligue a gravação, selecione a célula, tecle F2 e Enter e pare a gravação. O código gravado traz a fórmula exatamente como o VBA precisa dela.
Situação: a linha 14 deve receber a soma de cada trimestre (linhas 6 a 13), e a macro deve continuar funcionando se novos trimestres forem acrescentados à direita.
Sub Formula_1()
Dim coluna As Integer
coluna = 3
Do While Cells(5, coluna) <> ""
Cells(14, coluna).FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
coluna = coluna + 1
Loop
End Sub
O laço anda pelas colunas enquanto houver cabeçalho na linha 5. Em R1C1, a fórmula é a mesma em todas as colunas: oito linhas acima até uma linha acima. Em C14 ela vira =SOMA(C6:C13); em D14, =SOMA(D6:D13).
Resultado: 18.950, 22.970, 16.470 e 22.640. Com um "5º Trim" em G5, basta rodar de novo.
O slide mostra outra versão, com With e For i = 3 To 6, que usa a linha 13 para o total e as linhas 5 a 12 para os dados. O arquivo atual tem uma linha a mais no topo (dados nas linhas 6 a 13, total na 14). Copiar o código do slide sem ajustar gravaria os totais em cima de Mato Grosso, um lembrete de que macro com endereço fixo quebra quando o layout muda.
Para o total sair em negrito, com fundo e borda, grave uma macro que formata uma célula e cole as linhas gravadas dentro do laço, trocando Selection por Cells(14, coluna). Comente cada bloco (' coloca a fórmula, ' formata o fundo, ' borda superior): em duas semanas, o comentário é o que explica o código.
2.11Automação de relatórios
O uso mais comum do VBA nas empresas é gerar relatórios: o mesmo modelo, preenchido para cada cliente, filial ou produto, salvo em arquivos separados e, às vezes, enviado por e-mail. O slide propõe organizar um projeto desses em módulos com funções claras:
| Módulo | Papel |
|---|---|
a_Main |
Principal: chama as outras sub-rotinas, na ordem |
b_Queries |
Consultas às bases de dados |
c_Formulas |
Fórmulas, cálculos e metodologias |
d_Formata |
Formatação de cabeçalhos, tabelas e gráficos |
e_Salva |
Grava o arquivo na pasta definida na planilha |
Tabela 2.7. Estrutura de módulos para relatórios. O prefixo com letra mantém a ordem na janela Projeto.
Sub Main()
Call Queries 'sub-rotina de consultas na base
Call Formulas 'fórmulas, metodologias, cálculos dos resultados
Call Formata 'formatação de gráficos, tabelas e cabeçalhos
Call Salva 'salva relatório em pasta identificada na planilha
End Sub
Cada sub-rotina pode ser testada sozinha, e o Main vira um índice legível do processo. Os códigos de formatação e de gravação costumam nascer, de novo, da gravação de macro.
Situação: a aba Automacao_1 é um relatório mensal de um cliente: o código em C5 alimenta fórmulas SOMASES que buscam volume, faturamento, custo e margem na base. A aba Lista tem os códigos (coluna D) e os nomes (coluna E) dos clientes. Objetivo: gerar um arquivo para cada cliente, salvo na mesma pasta do arquivo de macros.
Sub Automacao_1b()
Dim linha As Integer
Dim cliente As String
linha = 2
Do While Worksheets("Lista").Cells(linha, 4) <> ""
cliente = Worksheets("Lista").Cells(linha, 5)
Sheets("Automacao_1").Select
Range("C5").Select
ActiveCell.FormulaR1C1 = Worksheets("Lista").Cells(linha, 4)
Sheets("Automacao_1").Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "/" & cliente & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
linha = linha + 1
Loop
End Sub
Passo a passo de cada volta: lê o nome do cliente; escreve o código em C5 (as fórmulas recalculam); copia a aba para uma pasta de trabalho nova (.Copy sem destino cria um arquivo novo, que fica ativo); salva esse arquivo com o nome do cliente na pasta de ThisWorkbook.Path; fecha e passa para a próxima linha. O laço termina na primeira linha vazia da Lista, qualquer que seja o número de clientes.
A primeira versão da aula, Automacao_1, copia a aba dentro do próprio arquivo (Copy Before:=Sheets(9)) e renomeia a cópia com o nome do cliente: uma aba por cliente, em vez de um arquivo por cliente.
A aba copiada leva as fórmulas SOMASES, que continuam apontando para a base no arquivo original. Quem receber o Cliente 1.xlsx verá um aviso de vínculo externo e, sem acesso ao original, números desatualizados ou erros. Antes de salvar, converta a aba copiada em valores: ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value. Quanto ao caminho, Application.PathSeparator devolve a barra certa para o sistema (\ no Windows, / no Mac), no lugar do "/" fixo.
Enviar por e-mail
A versão Automacao_1c acrescenta uma linha ao laço: Call e_mail(cliente, email), com o e-mail lido da coluna F da Lista. A sub-rotina abre o Outlook e monta a mensagem com o anexo:
Sub e_mail(cliente, email)
Dim OutApp As Object, OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = email
.Subject = "Consolidado de pedidos no ano"
.Body = "Bom dia, " & cliente & "," & vbNewLine & vbNewLine & _
"Segue anexo o consolidado de seus pedidos!"
.Attachments.Add ThisWorkbook.Path & "/" & cliente & ".xlsx"
.Display ' troque por .Send para enviar direto
End With
End Sub
.Display abre cada e-mail na tela para revisão; .Send envia sem perguntar. Comece sempre com .Display e só troque depois de conferir alguns e-mails, porque um erro na Lista vira 70 e-mails errados em segundos. O mesmo padrão serve para cobranças com texto padrão e campos variáveis (nome, número da fatura, valor, vencimento) ou para salvar o relatório em PDF antes de anexar.
Uma macro que copia abas e abre arquivos faz a tela piscar a cada passo. Application.ScreenUpdating = False no início congela a tela durante a execução, e Application.ScreenUpdating = True no fim mostra o resultado de uma vez. Em macros grandes, o ganho de tempo é perceptível.
Outras rotinas que valem uma macro
Duas automações da aula mostram o mesmo raciocínio aplicado a ferramentas que o Excel já tem:
- Atingir Meta em lote (
Automacao_2): o Atingir Meta, visto em Modelagem, resolve uma célula por vez. Num laço, a macro roda oGoalSeeklinha a linha e encontra, por exemplo, o desconto de cada produto que leva a margem à meta. É o Exercício 5. - Gráfico série por série (
Automacao_3): o gráfico de bolhas do case P&J saía errado ao ser inserido de uma vez, e a correção era adicionar cada série à mão. A macro faz isso num laço, quantas séries houver. É o Exercício 6.
Assistentes de IA escrevem VBA bem, e o capítulo de IA trata disso em detalhe. Para uma tarefa recorrente, a regra do professor é usar a IA para construir a macro e deixar a macro rodar no dia a dia, sem gastar tokens. Peça código comentado, com nomes de variáveis claros e mensagem de conclusão, e teste com F8 antes de confiar. Um assistente dentro do Excel pode não conseguir criar o módulo nem o botão; ele entrega o código para você colar.
2.12Formulários, controles e eventos
A guia Desenvolvedor › Inserir oferece controles para montar formulários na planilha: botão, caixa de seleção, botão de opção, caixa de listagem, caixa de combinação, barra de rolagem. Há dois tipos:
- Controles de Formulário: mais leves e compatíveis. Um botão de formulário recebe uma macro por Atribuir Macro; os demais controles podem ser vinculados a uma célula (Formatar Controle › Vínculo da célula), que passa a receber a opção escolhida.
- Controles ActiveX: mais configuráveis, cada um com código próprio que roda quando ocorre um evento (clique, mudança de valor). Exigem o Modo de Design ligado para edição e funcionam só no Windows.
O conceito de evento vale também para abas e para o arquivo. Um código escrito no módulo de uma aba (na janela Projeto, duplo clique em Planilha1, por exemplo), com um nome reservado, roda sozinho quando algo acontece:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C5")) Is Nothing Then
MsgBox "Relatório atualizado para " & Range("C4")
End If
End Sub
Esse código dispara sempre que alguém altera C5 naquela aba. Outros eventos úteis: Workbook_Open (no módulo EstaPastaDeTrabalho, ao abrir o arquivo) e Worksheet_SelectionChange (ao mudar a seleção). Use com parcimônia: uma macro de evento que altera a própria aba pode disparar a si mesma em cadeia, e uma ação feita por macro não pode ser desfeita com Ctrl+Z.
2.13Exercícios resolvidos
Os Exercícios 1 a 3 usam o arquivo EBP_VBA_Arquivo1@2026.xlsx (abas Funcoes, Codigos e Algoritmos); os Exercícios 4 a 6 usam o EBP_VBA_Arquivo2@2026.xlsx. Antes de começar, salve cada arquivo como .xlsm e insira um módulo (Inserir › Módulo no editor).
Exercício 1: três funções (aba Funcoes)
Tarefa: criar as funções que calculam o saldo final dos três blocos da aba: juros simples; taxa progressiva (2% abaixo de R$ 10.000, 3% acima); e juros compostos com taxa crescente.
As três funções são as das seções 2.5 a 2.7: JurosSimples, TaxaProgressiva1 e JurosProgr. Cole-as num módulo e use-as nas células amarelas:
D13: =JurosSimples(D9;D10;D11) → 110
D25: =TaxaProgressiva1(D23) → 10.198,98 (exibido 10.199)
D27: =D25/D23-1 → 2%
D39: =JurosProgr(D34;D35;D36;D37) → 1.273,80 (exibido 1.274)
Teste os limites. Na taxa progressiva, troque D23 por 10.001 (D27 passa a 3%) e por 10.000 (com o código do slide, também 3%; veja a seção 2.6). Em JurosProgr, troque D37 por 11: o saldo vai a 1.312,02, como no enunciado do slide.
Exercício 2: código que lê e grava células (aba Codigos)
Atividade 1. Levar o valor de C4 para uma variável e da variável para C5.
Sub Atividade_1()
Dim valor As Double
valor = Range("C4") ' ou Cells(4, 3)
Range("C5") = valor
End Sub
Atividade 2. Destacar, na tabela 1 (B12:K31), todas as células com o nome escrito em C9.
Sub Atividade_2()
Dim linha As Integer, coluna As Integer, achados As Integer
For linha = 12 To 31
For coluna = 2 To 11
If Cells(linha, coluna) = Range("C9") Then
Cells(linha, coluna).Interior.Color = vbYellow
Cells(linha, coluna).Font.Bold = True
achados = achados + 1
End If
Next coluna
Next linha
MsgBox achados & " células com " & Range("C9")
End Sub
Resultado: C5 = 1.000; Wally aparece 11 vezes. vbYellow é uma constante de cor do VBA; achados começa em zero porque toda variável numérica nasce com zero.
Atividade 3. Preencher a tabela 3 (produto, coleção e cor) a partir do código, usando a tabela 2 como referência e só VBA, sem fórmulas.
Sub Atividade_3()
Dim linha As Integer, ref As Integer
linha = 50
Do While Cells(linha, 2) <> ""
For ref = 38 To 45
If Cells(ref, 5) = Cells(linha, 2) Then
Cells(linha, 3) = Trim(Cells(ref, 3)) ' Produto
Cells(linha, 4) = Cells(ref, 2) ' Coleção
Cells(linha, 5) = Cells(ref, 4) ' Cor
End If
Next ref
linha = linha + 1
Loop
End Sub
Resultado: 220686 → SAIA, VERÃO, AMARELO; 224920 → JEANS, INVERNO, VERMELHO; 236106 → CINTO, PRIMAVERA, PRETO.
Dois detalhes. Os contadores de linha são Integer, mas o código do produto não cabe num Integer: se fosse guardado numa variável, ela teria de ser Long. O aviso da aba diz "até 37.767", mas o limite do Integer é 32.767. E na tabela 2 o produto "JEANS" vem com espaços sobrando no fim; a função Trim remove esses espaços, como o ARRUMAR (TRIM) faz na planilha.
Exercício 3: macros que escrevem fórmulas (aba Algoritmos)
Atividade 1. A soma dos trimestres na linha 14 é a macro Formula_1 do Exemplo 2.9, sem nenhuma alteração: o layout da aba Algoritmos é o mesmo.
Atividade 2. Buscar o valor mensal de cada cargo da tabela 3 pelo número de salário, na tabela 2.
Sub Formula_2()
Dim linha As Integer
linha = 36
Do While Cells(linha, 4) <> ""
Cells(linha, 5).FormulaR1C1 = "=VLOOKUP(RC[-1],R21C2:R32C3,2,0)"
linha = linha + 1
Loop
End Sub
RC[-1] é a célula uma coluna à esquerda, na mesma linha (o número de salário); R21C2:R32C3 é a tabela 2 em referência absoluta (B21:C32). Na planilha, E36 mostra =PROCV(D36;$B$21:$C$32;2;0). O laço segue enquanto houver número de salário na coluna D: cargos acrescentados embaixo entram na próxima execução.
Resultados: Analista de Salários 1.240; Gerente de Divisão 2.000; Contínuo 1.000; Secretária 1.500. Em aula, o professor pediu uma versão a um assistente de IA, com PROCX, variáveis de nomes claros, comentários e uma mensagem final com o número de linhas preenchidas. Para PROCX com valor padrão vazio, lembre das aspas duplicadas: "=XLOOKUP(RC[-1],R22C2:R32C2,R22C3:R32C3,"""")".
Exercício 4: relatório por cliente (aba Exercício_2)
Tarefa: a aba Exercício_2 é o relatório mensal da Base_2 por cliente (linhas de produto × indicadores, meses de jan/24 a dez/26 e consolidado anual). Gerar um arquivo para cada cliente da base.
Preparação. Crie a aba Lista com os códigos em D e os nomes em E, a partir da linha 2. Uma forma é escrever em D2 =ÚNICO(FILTRO(Base_2!A2:B3236;ÉNÚM(Base_2!A2:A3236))) e colar como valores: a base tem 70 clientes. Em C4 do relatório, =PROCX(C5;Lista!D:D;Lista!E:E) (XLOOKUP) mostra o nome do cliente cujo código está em C5.
Macro. É a Automacao_1b do Exemplo 2.10 com o nome da aba trocado, a conversão em valores e a mensagem final:
Sub Relatorio_por_Cliente()
Dim linha As Integer
Dim cliente As String
Application.ScreenUpdating = False
linha = 2
Do While Worksheets("Lista").Cells(linha, 4) <> ""
cliente = Worksheets("Lista").Cells(linha, 5)
Worksheets("Exercício_2").Range("C5") = Worksheets("Lista").Cells(linha, 4)
Worksheets("Exercício_2").Copy ' novo arquivo, ativo
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & _
Application.PathSeparator & cliente & ".xlsx", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
linha = linha + 1
Loop
Application.ScreenUpdating = True
MsgBox linha - 2 & " relatórios gerados em " & ThisWorkbook.Path
End Sub
Para conferir uma volta do laço, veja o Cliente 10: em Chapa Grossa, o volume de jan/24 é 10.768 t e o de 2024, 159.527 t; o faturamento negociado de 2024 é R$ 123.211.927, o que dá preço médio de R$ 772/t (=SE(AN9=0;0;AN15/AN9)). O arquivo Cliente 10.xlsx guarda exatamente esses números, já como valores. Ao final, a mensagem informa 70 relatórios gerados.
Exercício 5: Atingir Meta em lote (aba Exercicio6)
Tarefa: para cada produto, encontrar o desconto que leva a Margem Bruta (coluna I) à meta de C4 (67%).
Na aba, a Margem Bruta é o preço final (depois de desconto, ICMS e PIS/COFINS) dividido pelo preço cheio: I7 = H7/C7, com H7 = E7*(1-SOMA(F7:G7)) e E7 = C7*(1-D7). Com o desconto padrão de 10%, as margens vão de 63,0% a 68,4%. A macro roda o Atingir Meta (Dados › Teste de Hipóteses › Atingir Meta) linha por linha:
Sub Automacao_2()
Dim linha As Integer
linha = 7
Do While Cells(linha, 2) <> ""
Cells(linha, 9).GoalSeek Goal:=Cells(4, 3), ChangingCell:=Cells(linha, 4)
linha = linha + 1
Loop
End Sub
Em cada linha: definir a célula I (Cells(linha, 9)) para o valor de C4, alterando a célula D (Cells(linha, 4)). Como a margem é linear no desconto, dá para conferir a resposta à mão:
Margem = (1 − desconto) × (1 − ICMS − PIS/COFINS)
desconto = 1 − 0,67 / (1 − ICMS − PIS/COFINS)
ACESSORIO/XALE/ECHARPE: 1 − 0,67 / (1 − 0,19 − 0,07) = 1 − 0,67/0,74 = 9,46%
O desconto possível depende só da carga de impostos de cada produto: vai de 4,3% (AROMA, BASIQUE, CALCADO, CAPRI e CINTO, com 30% de impostos) a 11,8% (IMPORTADO CINTO, com 24%). O Atingir Meta trabalha por aproximações sucessivas, então os descontos gravados podem diferir dos calculados nas últimas casas decimais.
Exercício 6: gráfico de bolhas série por série (aba Exercicio5)
Tarefa: criar um gráfico de bolhas com um competidor por série (eixo X: lucro líquido; eixo Y: margem; tamanho: clientes), com o nome de cada competidor como rótulo. A macro deve funcionar para qualquer número de linhas.
Gravando a inserção do gráfico e a adição de duas séries, aparecem as linhas que se repetem para cada série; o laço troca os números fixos pelas variáveis linha e serie:
Sub Grafico_Bolhas()
Dim linha As Integer, serie As Integer
linha = 3
serie = 1
ActiveSheet.Shapes.AddChart2(269, xlBubble).Select
Do While Cells(linha, 2) <> ""
ActiveChart.SeriesCollection.NewSeries
With ActiveChart.FullSeriesCollection(serie)
.Name = "=Exercicio5!$B$" & linha
.XValues = "=Exercicio5!$C$" & linha
.Values = "=Exercicio5!$D$" & linha
.BubbleSizes = "=Exercicio5!$E$" & linha
.ApplyDataLabels
.DataLabels.ShowSeriesName = True
.DataLabels.ShowValue = False
End With
linha = linha + 1
serie = serie + 1
Loop
ActiveChart.Legend.Delete
ActiveChart.ChartGroups(1).BubbleScale = 20
End Sub
O endereço de cada série é montado juntando texto e número com &: na volta da linha 5, "=Exercicio5!$B$" & linha vira =Exercicio5!$B$5. No arquivo de macros da aula, o mesmo código aponta para a aba Automacao_3; ao reaproveitá-lo, troque o nome da aba em todas as linhas (ou guarde-o numa variável). Com 100 linhas, a macro cria 100 séries. BubbleScale = 20 reduz as bolhas a 20% do tamanho padrão, e a legenda sai porque os rótulos já identificam cada bolha. Execute a macro de novo e obtenha um gráfico novo, sem gastar nada: é a diferença entre pedir a uma IA que faça o gráfico uma vez e ter uma rotina que o refaz sempre que os dados mudam.
- Macro é uma sequência de passos que o Excel executa sozinho. A guia Desenvolvedor (Arquivo › Opções › Personalizar Faixa de Opções) traz a gravação e o editor (Alt+F11).
- Gravar é o melhor ponto de partida: grave uma vez, leia o código, apague o que sobra e acrescente laços e condições.
- Macros só ficam em
.xlsm(ou.xlsb). Habilite conteúdo apenas de arquivos de origem conhecida; arquivos da internet chegam com as macros bloqueadas. - Declare as variáveis (
Dim) com o tipo certo: Integer até 32.767, Long para inteiros grandes, Double para decimais, String para texto, Boolean para verdadeiro/falso. Inicialize antes do laço. - Function recebe argumentos e devolve um valor atribuído ao próprio nome; vira uma função da planilha.
- If/ElseIf/Else executa só o primeiro bloco verdadeiro; a ordem dos testes e o valor exato do limite importam.
- Do While repete enquanto a condição é verdadeira e precisa de um contador que ande; For...Next conta sozinho. Contador em 1 combina com
<=; em 0, com<. Range("C5")eCells(5, 3)apontam para a mesma célula; Cells aceita variáveis..Formulae.FormulaR1C1recebem a fórmula em inglês, com vírgulas.- Um laço sobre uma lista, um modelo alimentado por uma célula e
SaveAsgeram um relatório por cliente; converta em valores antes de salvar e avise o fim com MsgBox.
2.14Exercícios propostos
Use os arquivos dos Exercícios 1 a 6, salvos como .xlsm.
- Reescreva a macro
Do_while_loop_linhas(Exemplo 2.6) com For...Next. Qual o último número escrito e em que célula? - Crie a função
JurosCompostos(valor; taxa; periodos), com a taxa em percentual, e teste com os dados do primeiro bloco da aba Funcoes (100; 5; 2). - Na função
TaxaProgressiva1do slide, qual o resultado para um saldo de exatamente 10.000? O que muda no código para que 10.000 receba 2%? - Ajuste a aba Funcoes para que
JurosProgrreproduza o enunciado do slide, que vai até a taxa de 3%. Qual o saldo final? - Na aba Algoritmos, escreva uma macro que coloque em G6:G13 o total de cada estado no ano, com uma única fórmula R1C1 num laço. Quais os totais de São Paulo e de Mato Grosso, e a soma de G6:G13?
- Na aba Sub_If_ElseIf_Else, troque o nome de C6 por "Allan" e rode a macro
nomes. Quantas células ficam em cada cor? - Na aba Exercicio6, mude a meta de C4 para 65% e rode a macro do Exercício 5. Qual o desconto do ACESSORIO/XALE/ECHARPE e o do IMPORTADO CINTO?
- A aba Exercício_4 pede um relatório por loja, cada um numa aba, a partir da Base_4. Descreva a estrutura da macro (lista, laço, criação e nome das abas) e diga quantas abas ela criará.
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer
Módulo 3 · Automatização · Capítulo 3
AI para análise de dados
Este material foi desenvolvido para ser usado em conjunto com as aulas e os materiais do Excel, AI + Business Program (EBP) da BTC. Ainda não é aluno? Membros do BTC Club ou BTC Plus têm desconto especial na inscrição.
Conhecer o EBP →Até aqui o curso quase não usou inteligência artificial para resolver problemas, e isso foi de propósito. Quem entende como um modelo é estruturado, como o Power Query trata uma base e como uma macro percorre uma Tabela consegue fazer duas coisas que quem não entende não consegue: pedir com precisão e conferir o que voltou. Este capítulo fecha o módulo de Automatização com essa ideia. A IA entra como mais uma peça do processo, ao lado das fórmulas, do Power Query e do VBA, e a pergunta central deixa de ser "qual ferramenta é a melhor" e passa a ser "onde a IA deve executar e onde ela deve construir o que vai executar".
Ferramentas de IA mudam a cada poucos meses: nomes, planos, limites e recursos. Por isso o capítulo se apoia em critérios que continuam valendo quando o botão muda de lugar. As descrições de produtos seguem o material do curso, na versão de 2026, e devem ser conferidas na documentação de cada fornecedor antes de qualquer decisão de compra ou de uso na empresa.
- Distinguir processo determinístico de processo estocástico e aplicar a regra de ouro: no primeiro, peça o código; no segundo, peça a resposta e revise.
- Escolher entre a IA que analisa uma cópia do arquivo e a IA que trabalha dentro da pasta aberta, conforme a pergunta e o lugar onde o dado mora.
- Reconhecer os caminhos de uso do Claude (chat, no Excel, Cowork, Code) e decidir entre assinatura e API pelo teste do humano lendo cada resposta.
- Escrever um pedido no padrão CONTEXTO / TAREFA / REQUISITOS / ACEITE e escolher a tecnologia certa: fórmula, Power Query, VBA, Python, PowerShell ou Power Automate.
- Auditar uma análise feita por IA: total contra a fonte, média ponderada, base do percentual, duplicatas e período.
- Aplicar regras de governança, economizar tokens e organizar uma pasta de projeto com um CLAUDE.md curto.
3.1Panorama: onde a IA entra
Determinístico × estocástico
O conceito vem do módulo de Modelagem. O modelo de projeção financeira é determinístico: com as mesmas premissas, dá sempre o mesmo resultado. A simulação de Monte Carlo é estocástica: cada rodada sorteia valores, e o que interessa é a distribuição dos resultados. O mesmo critério serve para decidir como usar IA num processo de trabalho.
Determinístico: a mesma entrada produz sempre a mesma saída. Somar uma coluna, aplicar uma regra fixa, consolidar arquivos, limpar uma base: há uma resposta certa e um passo a passo que chega nela.
Estocástico: a mesma entrada pode produzir saídas diferentes, e várias delas são aceitáveis. Redigir um e-mail, resumir um contrato, classificar o tom de uma mensagem, sugerir hipóteses.
Modelos de linguagem são, por natureza, estocásticos: a mesma pergunta feita duas vezes pode receber duas respostas diferentes. Isso é ótimo para redigir e sugerir, e perigoso para calcular. Daí a regra que atravessa todo o capítulo:
Se o processo é determinístico, peça à IA o código que faz o trabalho (fórmula, Power Query, VBA, Python) e deixe o código executar. Se o processo é estocástico, peça a resposta e revise. Em processo estocástico, a revisão humana faz parte do processo por construção.
Por que não deixar a IA executar também a parte determinística? Por três motivos. Primeiro, o resultado varia: hoje a análise vem de um jeito, amanhã de outro, e cada execução exige uma nova conferência. Segundo, custa: cada execução consome cota ou tokens, enquanto uma consulta do Power Query roda de graça para sempre. Terceiro, não é auditável: você não lê o "passo a passo" de uma resposta da IA como lê o código M de uma consulta.
Situação: classificar cada tarefa e dizer o que pedir à IA.
| Tarefa | Tipo | O que pedir |
|---|---|---|
| Consolidar os 12 extratos mensais numa base única | Determinístico | O código (Power Query) |
| Calcular a comissão de cada vendedor pela tabela de faixas | Determinístico | A fórmula (PROCX ou SES) |
| Escrever o e-mail que apresenta o resultado do mês à diretoria | Estocástico | A resposta, revisada |
| Padronizar a coluna Região de uma base que chega suja todo mês | Determinístico | O código (Power Query ou Python) |
| Classificar 300 comentários de clientes em elogio, reclamação ou dúvida | Estocástico | A resposta, com amostra revisada |
| Explicar a um colega como funciona um modelo herdado | Estocástico | A resposta, conferida no modelo |
Tabela 3.1. Classificação das tarefas do Exemplo 3.1.
O teste é sempre o mesmo: se eu rodar duas vezes com a mesma entrada, preciso exatamente da mesma saída? Quando a resposta é sim, a IA constrói e o código executa. Um mesmo processo pode ter as duas partes: o relatório mensal tem a consolidação (determinística) e o parágrafo de comentário (estocástico). Automatize a primeira e use a IA na segunda.
Os grandes assistentes
O primeiro contato da maioria das pessoas com IA é o assistente de chat: você escreve uma pergunta e recebe uma resposta em texto. O material do curso, em 2026, resume assim os principais:
| Assistente | Onde brilha | Ponto de atenção |
|---|---|---|
| ChatGPT | Análise de dados com Python num ambiente isolado; ecossistema grande | O ambiente isolado não tem internet; limite por arquivo |
| Claude | Trabalho com arquivos, código e agentes; integração com o Excel | Os recursos principais exigem plano pago |
| Gemini | Integrado ao Google Workspace (Planilhas, Drive, Gmail) | Análise em planilha costuma ser mais rasa |
| Grok | Respostas rápidas e integração com o X | Menos maduro para trabalho com arquivo corporativo |
| Copilot | Dentro do Office, onde o dado já está | A parte que trabalha os dados no Excel exige licença adicional |
Tabela 3.2. Assistentes de IA segundo o material do curso (2026). Recursos e planos mudam com frequência; confira antes de decidir.
O quadro vai envelhecer; o critério, não: o melhor assistente é o que já está onde o seu dado está, com a governança que a sua empresa aceita.
Agentes, construtores e o resto do ecossistema
Além dos assistentes, o material separa outras famílias de ferramenta:
- Agentes executam tarefas em várias etapas, em vez de só responder. Para agir, usam ferramentas: conexões com e-mail, calendário, navegador, arquivos. O material cita Manus, Genspark, o navegador agêntico Perplexity Comet e o Claude Cowork e Code, que trabalham nos seus arquivos locais.
- Construtores são ambientes voltados a escrever código (Claude Code, Cursor, VS Code com extensões de IA, entre outros). Em aula, o professor destacou que eles hoje servem também a quem não programa: você descreve o que quer e o construtor escreve, roda e testa o código.
- Pesquisa e leitura: Perplexity para fato externo com citação; NotebookLM (Gemini Notebook) para responder só a partir dos documentos que você carregou.
- Reunião, voz e criação visual: ferramentas de nota de reunião, de ditado por voz (útil para escrever prompts longos falando) e de design assistido.
- Automação de processos (Zapier, Make, n8n, Power Automate): ferramentas anteriores à onda da IA, baseadas em gatilho e ação. "Quando chegar um e-mail com anexo, salve o anexo na pasta X." Hoje a IA também ajuda a montar esses fluxos.
Ferramenta, no vocabulário dos agentes, é uma conexão que deixa a IA agir num sistema (ler e-mail, abrir o navegador, gravar arquivo). O MCP (Model Context Protocol) é um padrão para essas conexões, como uma porta USB: cada sistema publica o seu conector e qualquer agente compatível usa. Uma skill é um arquivo de texto com a "receita" de uma tarefa (como montar um relatório no padrão da área, por exemplo), carregada só quando a tarefa é pedida.
O agente erra sozinho, em série e rápido. Delegue a ele tarefas cujo resultado você consegue verificar e mantenha a revisão no fim.
Ferramenta some, conceito fica
O material traz um caso de 2026: a OpenAI anunciou o fim do Sora, seu aplicativo de vídeo, em março; o aplicativo saiu do ar em abril e a API foi programada para encerrar em setembro. Quem tinha um processo inteiro amarrado a ele precisou refazer tudo. As lições valem para qualquer ferramenta:
- Aprenda o conceito (ETL, agente, verificação), não o botão.
- Não amarre processo crítico a uma ferramenta única sem plano B.
- Prefira o que exporta: se você não consegue tirar seu dado de lá, você não é dono dele.
- Sobrevive o que está embutido no fluxo que a empresa já usa.
A regra de ouro ajuda aqui também. Uma automação que a IA construiu em Power Query ou Python continua rodando se você cancelar a assinatura ou trocar de fornecedor. Uma rotina em que a IA executa o trabalho todo mês para no dia em que a ferramenta mudar.
3.2As ferramentas de quem analisa dados
Dois modos de trabalhar com o seu dado
Para análise de dados, a primeira escolha não é a marca da IA, e sim onde ela trabalha.
| A IA analisa uma CÓPIA | A IA trabalha DENTRO do arquivo | |
|---|---|---|
| Como funciona | Você sobe o arquivo; ela devolve o resultado | Ela enxerga e edita a pasta aberta |
| Exemplos (material de 2026) | ChatGPT (análise de dados), Claude no chat | Copilot no Excel, Claude no Excel |
| O que faz | Roda Python num ambiente isolado e devolve texto, gráfico e arquivo | Lê fórmulas e dependências, cita células, altera o modelo |
| Vantagem | Potente; funciona até em planos gratuitos | Contexto real do seu modelo |
| Limite | Não toca a sua planilha: é preciso subir e baixar | Exige licença e a pasta precisa estar aberta |
Tabela 3.3. Os dois modos de usar IA com planilhas.
Análise sobre cópia: o que esperar
Na análise sobre cópia, a IA escreve e roda código Python sobre o arquivo que você enviou. Conforme o material, isso é bom para estatística, limpeza, gráficos e geração de um arquivo de saída, e a IA costuma mostrar o código, o que permite conferir o caminho. Os limites práticos:
- há limite de tamanho por arquivo e o ambiente não tem acesso à internet;
- pastas pesadas de fórmulas e com células mescladas costumam travar a leitura;
- a sessão expira e o ambiente se perde: o que não foi baixado some;
- o seu arquivo original não muda; qualquer correção precisa ser levada de volta à mão.
É o modo ideal para a exploração inicial de uma base nova.
Copilot no Excel: o incluído e o pago à parte
O material chama atenção para uma confusão comum. Existe um Copilot de chat acoplado aos aplicativos do Microsoft 365, de uso geral (redigir, explicar), e existe o Copilot que trabalha os dados dentro do Excel, vendido como licença adicional por usuário. O material cita ainda, em 2026, um modo de edição que mostra o passo a passo e o que mudou na planilha, e a integração com Python dentro da célula (função PY), disponível em parte das plataformas.
Segundo o material, o Copilot no Excel exige o arquivo no OneDrive ou SharePoint com o salvamento automático ligado, e um rótulo de confidencialidade alto pode bloquear o uso. Antes de planejar um processo em cima dele, teste com um arquivo real da sua área.
Pesquisa e leitura: fato externo e documentos fechados
Duas ferramentas resolvem perguntas que não estão na sua base:
- Perplexity responde com citação das fontes, o que permite conferir. Serve para tamanho de mercado, concorrentes, regulação, benchmarks. Não serve para calcular os seus números.
- NotebookLM responde apenas a partir dos documentos que você carregou (40 contratos, relatórios anuais, normas). Como a fonte é fechada, a invenção cai muito. Também gera resumos em áudio.
Qual ferramenta para qual pergunta
| Sua pergunta | A ferramenta |
|---|---|
| "Explore esta base que eu nunca vi" | Chat com análise sobre cópia (ChatGPT ou Claude) |
| "Explique e conserte o meu modelo aberto" | IA dentro do Excel (Claude no Excel ou Copilot) |
| "Trate esta pasta com 40 arquivos" | Agente com acesso aos arquivos (Claude Cowork ou Code) |
| "Isso vai repetir todo mês" | Peça CÓDIGO: Power Query, VBA ou Python |
| "Preciso de um dado do mercado" | Pesquisa com fonte (Perplexity) |
| "Leia estes 40 PDFs e me responda" | Leitura de fontes fechadas (NotebookLM) |
Tabela 3.4. Ferramenta pelo tipo de pergunta, conforme o material do curso.
Situação: quatro pedidos chegam na mesma semana.
- "Recebi um CSV de 20 mil linhas de um sistema novo. O que tem aqui?" Pergunta de exploração, base nunca vista: chat com análise sobre cópia. Peça primeiro o diagnóstico de qualidade, sem análise de negócio.
- "O modelo de orçamento está dando #REF! na aba de despesas." O modelo já existe e está aberto: IA dentro do Excel, que enxerga as dependências e aponta a célula.
- "Todo dia 5 eu junto as vendas das três filiais e monto o resumo." Processo repetitivo e determinístico: peça o código (Power Query, se a fonte é uma pasta de arquivos).
- "Quanto o mercado de cafeterias cresceu no Brasil nos últimos cinco anos?" Fato externo: pesquisa com fonte, e confira a citação antes de usar o número.
Repare que a pergunta 3 poderia ser respondida pela IA todo dia 5. Funcionaria, mas cada mês exigiria uma nova conferência e consumiria cota. Pedir o código uma vez resolve para sempre.
3.3Claude a fundo: os caminhos
O curso aprofunda um fornecedor, o Claude, da Anthropic, porque o professor o considera hoje a principal referência para trabalho com planilhas fora do mundo do desenvolvimento puro. Os mesmos critérios valem para os concorrentes.
Os caminhos e onde cada um vive
| Caminho | O que é | Requisito (material de 2026) |
|---|---|---|
| Chat (web ou aplicativo) | Conversa com upload, código e geração de arquivo | Funciona no plano gratuito |
| Claude no Excel | Painel dentro do Excel que edita a pasta aberta | Plano pago e Excel compatível |
| Cowork | Agente que trabalha nos seus arquivos, sem terminal | Plano pago (aplicativo de desktop) |
| Claude Code | Agente para pipeline e código; roda no terminal, no aplicativo de desktop e no VS Code | Plano pago |
| Extensão do navegador | Agente que navega e extrai dados de sites | Planos pagos |
Tabela 3.5. Os caminhos do Claude segundo o material do curso. O aplicativo de desktop reúne chat, Cowork e Code numa interface gráfica e é o ponto de partida recomendado.
Claude no Excel
| O que faz bem | Limites que importam |
|---|---|
| Responde sobre a pasta aberta citando a célula | Não escreve VBA nem macros |
| Muda uma premissa preservando as dependências | Só enxerga a pasta que está aberta |
| Depura #REF!, #VALOR! e referência circular | Apenas .xlsx e .xlsm |
| Monta e preenche modelos (três demonstrativos, FCD) | Histórico local, sem sincronizar entre máquinas |
| Ordena, filtra, formata, valida, mexe em tabela dinâmica | Não recomendado para cálculo crítico sem revisão |
Tabela 3.6. Claude no Excel, conforme o material do curso (2026).
O painel tem preferências que valem a pena ligar. Uma delas é o registro (log) das alterações numa aba própria: cada pedido, o que foi feito e em quais células. Outra é o modo de permissão: pedir aprovação antes de cada alteração ou deixar o assistente alterar livremente. Para quem está começando, aprovar antes é o mais seguro.
Em aula, o professor contou que usa a IA dentro da planilha para tarefas pequenas: replicar uma formatação para as outras abas, tirar uma dúvida de fórmula, investigar um erro. Para trabalhos estruturados, prefere o Claude Code.
Cowork e Claude Code: quando a tarefa é grande
| Cowork | Claude Code |
|---|---|
| Agente para quem não programa | Agente para trabalho repetível |
| Trabalha numa pasta inteira de arquivos | Pipeline versionado (Git) |
| Produz .xlsx com fórmula e formatação | Processa centenas de pastas de trabalho |
| Tarefas agendadas (consolidar toda segunda, por exemplo) | Conecta a banco de dados e API |
| Consome bastante cota | Disponível no terminal, no aplicativo e no VS Code |
Tabela 3.7. Cowork × Claude Code, segundo o material do curso.
Os dois trabalham numa pasta do seu computador: ao apontar a pasta, você dá ao agente acesso a todos os arquivos dela. Ele lê, escreve código, roda o código e confere o resultado. No Claude Code há um modo de planejamento, em que o agente analisa e propõe um plano sem alterar nada; para projetos grandes, comece por ele.
O aplicativo também oferece projetos: um espaço com nome, objetivo, instruções e arquivos de referência que valem para todas as conversas daquele projeto. É útil para manter contexto, com a ressalva, apontada em aula, de que os arquivos ficam num conjunto único, sem subpastas.
Os assistentes oferecem modelos mais leves e mais fortes e, em alguns casos, um nível de esforço de raciocínio. O professor usa como padrão um modelo forte com esforço baixo, que considera o melhor custo-benefício: esforço alto leva mais tempo e gasta mais cota sem melhora proporcional na maioria das tarefas. Para tarefas simples, um modelo leve basta.
Assinatura ou API?
Há dois jeitos de pagar por IA. Na assinatura, você paga um valor fixo e usa as interfaces do fornecedor, com teto de uso por sessão e por semana. Na API, você paga por token consumido, sem teto, e acessa o modelo por programa.
| Assinatura | API (Console) |
|---|---|
| Custo fixo e previsível | Paga por token, sem teto de uso |
| Trabalho interativo: você lê cada resposta | Programático: roda sem ninguém lendo na hora |
| Inclui chat, Cowork, Code e Claude no Excel | Descontos próprios (cache e processamento em lote) |
| Teto de uso por sessão e por semana | Controle de gasto por workspace e por usuário |
Tabela 3.8. Assinatura × API, conforme o material do curso.
Se um humano não está lendo cada resposta na hora em que ela sai, aquilo é caso de API.
Quem tem a sua chave de API consome no seu nome. Não cole a chave em planilhas, e-mails ou código compartilhado, e configure um teto de gasto no console.
- Um analista usa o Claude no Excel para revisar o modelo de orçamento e lê cada sugestão. Humano lendo: assinatura.
- Toda noite, um fluxo do n8n lê os chamados de suporte do dia, pede à IA um resumo de cada um e grava numa planilha. Ninguém lê na hora: API, com teto de gasto.
- Toda segunda, a base de vendas é consolidada e o resumo por região é gerado. Processo determinístico: nem uma nem outra para rodar. Use a assinatura uma vez para a IA escrever o código, e depois o código roda sozinho, de graça.
O caso 3 é o mais comum em finanças e o que mais se resolve do jeito errado: o processo é pago todo mês quando bastaria pagar uma vez para construí-lo.
Com o modelo completo da Modelagem aberto, peça ao assistente uma explicação da mecânica da planilha e três achados de negócio, cada um com o número que o sustenta. Depois mude uma premissa e veja se as dependências foram preservadas, e provoque um erro para pedir o diagnóstico. Em aula, a mesma pergunta feita no painel do Excel e no Claude Code trouxe respostas de profundidade diferente, e na Turma 108 o assistente encontrou erros reais de sinal nos totais anuais do modelo. Nos dois casos, cada achado foi conferido na planilha antes de ser aceito.
3.4IA como construtora de automação
O padrão: a IA escreve, o código executa
O Bloco 3 aplica a regra de ouro à automação. Em vez de pedir à IA que trate a base todo mês, você pede que ela escreva o código que trata, testa esse código e coloca para rodar.
O padrão ganha por três motivos: o resultado é auditável (você lê o código), é reproduzível (roda igual todo mês) e tem custo zero por execução (não consome IA para rodar). Mesmo que você não leia cada linha do código, precisa testá-lo de algumas maneiras e conferir se o que sai faz sentido.
VBA em 2026
O material reforça que o VBA segue vivo e que a Microsoft continua investindo nele. O que está sendo aposentado é o VBScript (arquivos .vbs), que é outra coisa.
| Por que ainda vale | A realidade da segurança |
|---|---|
| Vive dentro do arquivo, sem instalar nada | Macro em arquivo vindo da internet é bloqueada, sem botão de habilitar |
| É a automação que o analista controla sozinho | Saídas: Propriedades do arquivo › Desbloquear, ou Local Confiável |
| A IA escreve VBA muito bem | É preciso salvar como .xlsm; .xlsx descarta a macro |
| Roda em máquina corporativa travada | Muitos filtros de e-mail barram anexos .xlsm |
Tabela 3.9. VBA em 2026, conforme o material do curso.
O prompt que funciona: CONTEXTO, TAREFA, REQUISITOS, ACEITE
Um pedido vago ("faz uma macro que resume as vendas") obriga a IA a adivinhar onde está o dado, como ele é e o que você considera certo. O padrão do curso, que está na aba E4_Prompt do arquivo de exercícios, tem quatro blocos:
| Bloco | O que escrever |
|---|---|
| CONTEXTO | Onde está o dado, como é a estrutura, quanto cresce, qual versão e idioma do Excel |
| TAREFA | O que você quer, em passos numerados |
| REQUISITOS | Restrições técnicas e de qualidade (não usar X, comentar, tratar erro) |
| ACEITE | Como saber que ficou certo: o teste que a solução tem que passar |
Tabela 3.10. Estrutura do prompt (aba E4_Prompt).
O bloco de aceite é o que mais muda o resultado e o que mais se esquece. Ele transforma "ficou bom?" num teste objetivo. Duas formas de aceite úteis em quase todo pedido: idempotência (rodar duas vezes produz o mesmo resultado, sem duplicar nada) e amarração (o total da saída bate com o total da fonte).
Uma rotina é idempotente quando rodá-la várias vezes seguidas produz o mesmo resultado que rodá-la uma vez: não duplica a aba, não soma de novo o que já foi somado, não acrescenta linhas repetidas. É a propriedade que permite agendar uma automação sem medo.
A aba E4_Prompt traz também as dicas que mais mudam o resultado:
- diga a versão do Excel e o idioma da interface, para evitar funções e menus que você não tem;
- peça duas ou três alternativas com prós e contras, em vez de aceitar a primeira;
- peça o código comentado, porque você precisa conseguir ler para auditar;
- dê um exemplo de entrada e da saída esperada, se o caso for complicado;
- se errou, não recomece: diga exatamente o que saiu errado e peça o ajuste.
Pedido vago: "Faz uma macro que resume as vendas por região."
O que a IA precisa adivinhar: em que aba está a base; se ela é uma Tabela; o nome das colunas; se a receita já está calculada; onde gravar o resumo; o que fazer se o resumo já existir; como tratar "sudeste" e "Sudeste". Cada adivinhação errada vira uma rodada de correção.
Pedido estruturado: o da Figura 3.4. Em uma linha de contexto, a IA sabe que a base é a Tabela tbl_Base da aba E1_Base, com a coluna Receita; a tarefa diz que a Região deve ser padronizada antes de somar; os requisitos excluem Select e Activate (que deixam a macro lenta e frágil); o aceite diz como você vai testar.
Teste do aceite: rodar a macro duas vezes e conferir que existe uma única aba Resumo e que a soma dos valores dá R$ 5.511.332,46, o mesmo que =SOMA(tbl_Base[Receita]). O código resultante está no Exercício 2.
Power Query, Python e fórmula moderna
O VBA é uma das saídas possíveis. O material compara quatro:
| Saída | Quando é a melhor | Cuidado |
|---|---|---|
| Power Query (M) | Tratamento e consolidação recorrente de dados | Peça também o passo a passo de cliques, não só o código M |
| VBA | Automação dentro da pasta, botão para o usuário | Bloqueio de macro e formato .xlsm |
| Python + openpyxl | Volume, agendamento, sem depender do Excel aberto | O openpyxl não calcula fórmulas; gere um arquivo novo em vez de editar o modelo |
| Fórmula moderna | Quando dá para resolver na própria planilha | Nem tudo precisa de automação; às vezes é só um AGRUPARPOR |
Tabela 3.11. As saídas que a IA pode escrever, conforme o material do curso.
Sem essa informação, a IA sugere funções que a sua versão não tem ou nomes de menu que não existem no Excel em português. Uma fórmula em inglês colada no Excel em português devolve #NOME?.
Para colar no Excel um código M escrito pela IA: Dados › Obter Dados › De Outras Fontes › Consulta em Branco, depois Editor Avançado, cole o código e confirme. A IA também pode explicar os cliques equivalentes na interface, o que ajuda a conferir cada etapa.
Situação: o resumo de receita por região da base E1_Base. Antes de pedir uma automação, vale perguntar se uma fórmula resolve.
=AGRUPARPOR(PRI.MAIÚSCULA(ARRUMAR(tbl_Base[Regiao]));
tbl_Base[Receita]; SOMA; 0; 1; -2)
ARRUMAR (TRIM) tira os espaços sobrando; PRI.MAIÚSCULA (PROPER) deixa só a primeira letra de cada palavra em maiúscula. Os argumentos finais pedem: sem cabeçalho (0), com linha de total (1) e ordenação decrescente pela 2ª coluna (−2). AGRUPARPOR (GROUPBY) exige o Microsoft 365.
Resultado: Sudeste 1.770.133,62; Nordeste 1.085.579,27; Norte 999.615,98; Centro-Oeste 987.862,53; Sul 668.141,06; total 5.511.332,46.
Sem a padronização, a base tem oito grafias de região: "sudeste" (linha 17), "SUL" (linha 33) e " Norte", com espaço na frente (linha 65). A venda de R$ 81.433,80 do " Norte" fica separada, e o Norte cai para 918.182,18, atrás do Centro-Oeste.
=SOMASES(tbl_Base[Receita];tbl_Base[Regiao];"Sudeste") devolve 1.770.133,62: os critérios do SOMASES (SUMIFS) não diferenciam maiúsculas de minúsculas, então "sudeste" entra na conta. Já " Norte", com espaço, não casa com "Norte": o SOMASES devolve 918.182,18 em vez de 999.615,98. Erros de espaço são silenciosos; trate na origem.
PowerShell: o lançador que substitui o .vbs
Para rodar uma macro sem ninguém abrir o Excel, o padrão antigo era um arquivo .vbs que abria a pasta, rodava a macro e fechava. Segundo o material, a Microsoft transformou o VBScript em recurso opcional e vai desabilitá-lo por padrão até removê-lo do Windows. O substituto é um script PowerShell, como o do slide:
# abre a pasta, roda a macro, salva e fecha - sem interacao humana
$caminho = "C:\Relatorios\fechamento.xlsm"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $false
$xl.DisplayAlerts = $false # evita travar num pop-up
try {
$wb = $xl.Workbooks.Open($caminho)
$xl.Run("AtualizarResumo") # nome da macro no VBA
$wb.Save()
}
finally {
if ($wb) { $wb.Close($false) }
$xl.Quit()
[void][Runtime.InteropServices.Marshal]::ReleaseComObject($xl)
}
O bloco finally garante que o Excel feche mesmo se a macro der erro; sem ele, processos do Excel ficam abertos em segundo plano. Você ainda vai encontrar .vbs rodando nas empresas: saiba ler e saiba migrar. A migração é de um para um (abrir, rodar, salvar, fechar). Peça à IA "converta este .vbs para PowerShell mantendo exatamente o mesmo comportamento" e rode os dois lado a lado antes de trocar no agendador.
Agendador de Tarefas: as armadilhas
O Agendador de Tarefas do Windows dispara um script num horário. O material lista as armadilhas mais comuns:
| Armadilha | O que fazer |
|---|---|
| "Executar estando o usuário conectado ou não" | Com Excel via COM, isso quebra. Use "somente quando o usuário estiver conectado" |
| Caminho relativo não resolve | Preencha o campo Iniciar em com a pasta do script |
| Unidade de rede mapeada não existe na sessão | Use o caminho UNC completo (\\servidor\pasta) |
| Falhou e você não sabe por quê | Redirecione a saída para um arquivo de log e ative o Histórico |
| Interpretador errado | Aponte o caminho completo do python.exe ou do powershell.exe |
Tabela 3.12. Armadilhas do Agendador de Tarefas.
A automação do Excel por COM (o que o PowerShell acima faz) não é suportada em sessão não interativa. Se a rotina precisa rodar com a máquina bloqueada ou sem ninguém conectado, use Python com openpyxl, que não abre o Excel.
Situação: rodar resumo_regiao.py (o script do Exercício 2) toda segunda às 7h.
- Ação › Iniciar um programa. Em Programa/script, o caminho completo do interpretador, por exemplo
C:\Python\python.exe, e não sópython. - Em Adicionar argumentos, o nome do script e do arquivo:
resumo_regiao.py "\\servidor\vendas\EBP_AI_Exercicios_2026_Aluno.xlsx", com caminho UNC em vez deV:\. - Em Iniciar em, a pasta do script. Sem isso, o caminho relativo do log falha.
- Ative o Histórico da tarefa e confira que o script grava o próprio log (o do Exercício 2 grava
resumo_regiao.log). - Rode a tarefa uma vez à mão pelo Agendador e leia o log antes de confiar no horário.
Como esse script não abre o Excel, ele pode rodar com o usuário desconectado. Um script que dispara macro por COM não pode.
Power Automate: o caminho sem código
O Power Automate é a ferramenta de gatilho e ação da Microsoft. Encaixa em fluxos entre sistemas e pessoas (e-mail, SharePoint, Teams, aprovações), por exemplo: o anexo de um e-mail vira uma linha numa Tabela e um aviso no Teams. A versão em nuvem roda com o computador desligado; a versão desktop, que vem com o Windows 11 para uso atendido, roda na sua máquina. É bom para o processo da empresa, não para cálculo pesado.
Os limites do conector do Excel, conforme o material: o dado precisa estar numa Tabela formatada (intervalo nomeado não serve); a listagem é paginada, poucas centenas de linhas por vez; há limite de tamanho por requisição; o arquivo precisa estar no OneDrive ou SharePoint; conectores premium e execução não atendida são pagos.
Qual automação para qual caso
| Caso | Ferramenta | Quem executa |
|---|---|---|
| Tratar e consolidar dados, todo mês | Power Query | Excel, no Atualizar |
| Botão que faz uma rotina na pasta | VBA | Excel, no clique |
| Rodar de madrugada, sem ninguém | Python + Agendador | Windows |
| Abrir o Excel e disparar a macro | PowerShell + Agendador | Windows |
| Processo entre sistemas e pessoas | Power Automate | Nuvem Microsoft |
| Trabalho pontual em lote de arquivos | Cowork | Você, com o agente |
Tabela 3.13. Qual automação para qual caso. A IA escreve qualquer um dos cinco primeiros; a escolha é uma decisão de arquitetura, não de ferramenta.
Quando uma automação que já funciona recebe uma mudança grande, o professor mantém as duas versões rodando juntas por alguns dias e compara os resultados. Só depois de várias rodadas iguais a versão antiga é aposentada.
3.5Boas práticas: verificação, governança, tokens e projeto
A IA erra com confiança
O erro perigoso não é o absurdo, que qualquer um percebe. É o plausível: um número que parece certo, numa frase bem escrita.
| Onde costuma errar | Como pegar |
|---|---|
| Soma que não fecha com a base | Confira o total contra a fonte, sempre |
| Média de médias em vez de média ponderada | Refaça um caso na mão |
| Percentual calculado sobre a base errada | Pergunte: percentual de quê, exatamente? |
| Fórmula que só funciona no exemplo | Teste com dado novo e com caso extremo |
| Afirmação sem número por trás | Exija o número e a origem dele |
Tabela 3.14. Erros típicos de uma análise feita por IA e como pegá-los.
Peça sempre o caminho até o número. Resposta sem rastro não entra em entregável.
Uma forma prática de seguir a regra é pedir à própria IA que monte a conferência com fórmulas na planilha: uma pequena tabela com =SOMA(tbl_Base[Receita]), as contagens e os subtotais, ao lado dos números que ela informou. Você continua conferindo a conferência, mas o trabalho cai muito. A aba Prompts_Uteis traz um pedido pronto para isso:
Revise criticamente a análise que você acabou de fazer. Para cada número:
de onde ele veio, qual o cálculo, e qual seria o erro mais provável.
Aponte o que você NÃO conseguiu verificar.
Situação: a IA entregou, entre outros, estes achados sobre a base E1_Base:
- "O Centro-Oeste tem o maior ticket médio, mais de R$ 120 mil por venda."
- "As vendas despencaram em junho: só R$ 168,9 mil, contra R$ 1,57 milhão em maio."
Primeiro achado. Confira com duas fórmulas:
=SOMASES(tbl_Base[Receita];tbl_Base[Regiao];"Centro-Oeste") → 987.862,53
=CONT.SES(tbl_Base[Regiao];"Centro-Oeste") → 8
987.862,53 / 8 → 123.482,82
O número confere, mas o rastro mostra o que a frase esconde: são só 8 vendas, e uma delas, de R$ 253.543,08 (84 Mesas Ajustáveis na linha 28), responde por um quarto da receita da região. Um ticket alto com oito observações é um ponto a investigar, não uma conclusão.
Segundo achado. Confira o período coberto:
=MÍNIMO(tbl_Base[Data]) → 04/01/2026
=MÁXIMO(tbl_Base[Data]) → 02/06/2026
A base termina em 2 de junho. Junho tem 4 vendas porque o mês mal começou. Comparar um mês de dois dias com um mês inteiro é erro de período, e a frase "despencaram" é falsa.
Governança: o que pode e o que não pode
Antes de colar qualquer dado numa ferramenta de IA, faça quatro perguntas: este dado pode sair da empresa? Tem nome de pessoa, CPF, salário, dado de cliente? A ferramenta é homologada pela empresa? Existe versão corporativa com contrato?
Para reduzir o risco:
- anonimize: troque nomes por códigos antes de subir;
- suba uma amostra, não a base inteira;
- prefira pedir o código e rodar localmente: assim o dado nem sai da sua máquina;
- cuidado com planilhas de terceiros: elas podem conter instruções escondidas para o agente (texto em fonte branca, comentários), que tentam desviar o que ele faz.
Em aula, o professor lembrou que contas corporativas costumam ter, por contrato, cláusulas de não uso dos dados para treinar modelos, enquanto contas individuais podem ter configurações diferentes. Confira a política da sua empresa e as configurações da sua conta; não presuma.
Situação: você quer pedir a uma IA um diagnóstico da base de vendas, mas a política da empresa não permite enviar nomes de vendedores.
- Numa área livre, monte a tabela de códigos, em L5 e M5:
L5: =ÚNICO(tbl_Base[Vendedor]) → 5 nomes
M5: ="V"&TEXTO(SEQUÊNCIA(LINS(L5#));"00") → V01 a V05
- Na cópia que vai para a IA, troque o nome pelo código:
=PROCX([@Vendedor];L5#;M5#)
- Apague a coluna de nomes da cópia (cole a coluna de códigos como valores) e envie.
Resultado: Ana Souza vira V01, Bruno Melo V02, Diego Farias V03, Carla Reis V04 e Elisa Cruz V05, na ordem em que aparecem na base. Quando a análise voltar com "V03 tem a maior receita", um PROCX no sentido contrário devolve o nome. A tabela de códigos fica só com você.
Token: o que consome e como economizar
Token é a unidade em que o modelo lê e escreve texto, aproximadamente uma palavra ou um pedaço de palavra. O contexto é tudo o que o modelo tem "na memória de curto prazo" naquela conversa: suas mensagens, as respostas, os arquivos lidos. Ele tem tamanho limitado.
| O que consome sem você perceber | O que fazer |
|---|---|
| Sessão longa: o histórico inteiro é reenviado a cada mensagem | Comece uma conversa nova a cada tarefa diferente |
| Arquivo grande relido várias vezes | Peça o recorte: "leia só as linhas 1 a 50" |
| Agente em modo automático, aprovando tudo sozinho | Delegue trabalho verboso a um subagente: só o resumo volta |
| Modelo mais forte do que a tarefa pede | Modelo leve para tarefa simples, forte para raciocínio difícil |
| Prompt longo e genérico | Prompt específico vale mais que prompt longo |
Tabela 3.15. Consumo de tokens, conforme o material do curso.
Além do custo, há a qualidade. O professor observou em aula que, conforme o contexto se enche, a resposta piora: o modelo começa a esquecer e a confundir instruções. Uma conversa por tarefa e um arquivo de contexto do projeto (próxima seção) resolvem os dois problemas.
Organização de projeto para trabalhar com agente
Uma pasta bem organizada faz o agente acertar mais gastando menos. A estrutura do material:
MeuProjeto/
CLAUDE.md <- as instruções permanentes do projeto
dados/
brutos/ <- nunca editar: o que veio da origem
tratados/ <- saída do tratamento
scripts/ <- o código que a IA escreveu e você revisou
saidas/ <- relatórios e planilhas geradas
README.md <- para o humano
Arquivo de texto na raiz da pasta do projeto que o Claude lê sempre que trabalha nela. Contém o que é o projeto, onde estão os dados, as convenções e o que nunca fazer. Por ser carregado sempre, deve ser curto (o material sugere menos de ~200 linhas). Instruções de uma tarefa específica vão no prompt ou numa skill, que só carrega quando é chamada.
O que colocar no CLAUDE.md: o objetivo do projeto, onde estão os dados, as convenções (prefixo tbl_ nas Tabelas, grade desligada, conteúdo a partir de B2), o que nunca fazer e o formato de saída esperado. É também o lugar das boas práticas de modelagem do curso: fórmulas encadeadas, sem valores colados no cálculo. Sem essa instrução, um agente que gera a planilha por Python pode calcular tudo por fora e gravar só os números, o que deixa o modelo inútil para simulação.
O histórico de conversas pode ficar só na máquina onde aconteceu. O professor pede ao agente que mantenha, além do CLAUDE.md, um arquivo de acompanhamento na pasta (o que foi planejado, o que foi feito, os próximos passos). Assim o projeto continua de qualquer computador, numa conversa nova, sem perder o fio. Outro hábito: pedir um backup do arquivo, com data e hora, antes de cada rodada de alterações.
Anti-padrões
| Anti-padrão | O que fazer em vez disso |
|---|---|
| Pedir para a IA CALCULAR o número | Peça a fórmula, a macro ou o script que calcula |
| Colar o resultado direto no entregável | Confira ao menos um caso na mão antes |
| Automatizar um processo que você não entende | Entenda primeiro; automatizar caos gera caos rápido |
| Subir a base inteira com dado sensível | Amostra anonimizada, ou peça o código e rode local |
| Uma conversa eterna para tudo | Uma conversa por tarefa |
| Aceitar a primeira resposta | Peça alternativas e os prós e contras de cada uma |
Tabela 3.16. Anti-padrões no uso de IA, conforme o material do curso.
3.6Fechamento: do conceito à rotina
O material propõe um roteiro para a primeira semana depois do curso:
| Passo | Ação concreta |
|---|---|
| 1. Escolha um processo | O que você refaz toda semana e odeia fazer |
| 2. Descreva, não peça | Use CONTEXTO / TAREFA / REQUISITOS / ACEITE |
| 3. Peça o código | Power Query, VBA ou Python, conforme a Tabela 3.13 |
| 4. Leia e teste | Confira contra um resultado que você já conhece |
| 5. Agende | Agendador de Tarefas, ou o botão da macro |
| 6. Monitore | Log e conferência mensal: automação sem monitoramento é bomba-relógio |
Tabela 3.17. Roteiro para automatizar o primeiro processo.
O passo 6 merece atenção. Quando você atualiza uma consulta no Excel, o erro aparece na hora. Uma automação, por definição, roda sem você olhando. Ela precisa avisar quando roda e quando falha, com um número de sanidade no aviso: a data do dado, a quantidade de linhas, o total. Um aviso de "rodou com sucesso" que traz o dado do dia anterior engana; um aviso com a data e o total permite conferir num relance. E se o aviso não chegou, o processo falhou até no alerta.
O curso inteiro cabe numa linha: Tools deu o vocabulário de fórmulas, Modelagem o raciocínio de modelo, Power Query o processo de dados, VBA e IA a automação e a escala. A pergunta que atravessa os quatro continua a mesma: qual é a pergunta de negócio, e qual ferramenta responde melhor?
3.7Exercícios resolvidos
Os exercícios usam o arquivo EBP_AI_Exercicios_2026_Aluno.xlsx, com sete abas: Leia-me, E1_Base, E2_Automacao, E3_Auditoria, E4_Prompt, E5_CLAUDE_md e Prompts_Uteis. Cada exercício tem duas trilhas com o mesmo resultado esperado: a PRO usa a IA dentro do Excel ou um agente (Claude no Excel, Cowork, Code); a FREE usa o chat com upload do arquivo. A base fictícia de vendas tem 181 linhas, de 04/01/2026 a 02/06/2026, na Tabela tbl_Base (aba E1_Base, B9:I190).
A aba Leia-me define que todo número citado no material vem da SOMA da coluna Receita, com todas as linhas, inclusive a duplicata plantada: R$ 5.511.332,46. Recalcular Qtd × PrecoUnit dá outro número, R$ 5.476.200,30, e não está errado: duas linhas têm Qtd ou PrecoUnit zerados com Receita preenchida. A lição é dizer sempre qual caminho você usou.
Exercício 1: a IA dentro (ou sobre) a sua planilha (aba E1_Base)
Tarefa: pedir à IA um diagnóstico da base e três achados de negócio, cada um com o número que o sustenta, e conferir um deles na mão. Desafio: o resumo por Região e Categoria, validado contra o total da base.
O pedido. O prompt de diagnóstico da aba Prompts_Uteis separa as duas etapas, o que é a ordem certa em análise de dados (primeiro a qualidade, depois o negócio):
Analise esta base e liste: (1) colunas com tipo inconsistente; (2) duplicatas;
(3) valores nulos ou zerados suspeitos; (4) categorias que parecem a mesma coisa
escrita de formas diferentes. Não faça análise de negócio ainda, só o
diagnóstico de qualidade.
O diagnóstico esperado. Conferido em Python, linha a linha:
| Problema | Onde | Efeito |
|---|---|---|
| Linha duplicada | Linhas 13 e 190 (04/01/2026, Bruno Melo, Sul, Cadeira Ergo, R$ 23.388,75) | Infla a receita em R$ 23.388,75 (0,4%) |
| Região com grafias diferentes | "sudeste" (17), "SUL" (33), " Norte" com espaço (65) | Separa a receita em 8 grupos em vez de 5 |
| Produto com espaço duplo | "Notebook Pro" (50) | Separa o produto em dois |
| Qtd zerada com Receita preenchida | Linha 21 (Qtd 0, R$ 29.746,20) | Qtd × PrecoUnit não bate com Receita |
| PrecoUnit zerado com Receita preenchida | Linha 98 (PrecoUnit 0, R$ 5.385,96) | Idem |
Tabela 3.18. Diagnóstico de qualidade da base E1_Base.
As colunas têm tipo consistente (datas, textos e números), e o período vai de 04/01/2026 a 02/06/2026.
Conferência na própria planilha. Uma coluna auxiliar mostra, linha a linha, se Qtd × PrecoUnit bate com a Receita. Digite o cabeçalho Confere em J9: a Tabela se expande e aceita referências estruturadas.
J10: =ARRED([@Qtd]*[@PrecoUnit]-[@Receita];2)
O ARRED evita resíduos de ponto flutuante: sem ele, algumas linhas mostrariam algo como 0,0000000001 em vez de zero.
Ao lado da base, um bloco de conferência com fórmulas responde às perguntas de quantidade e total, e o AGRUPARPOR do Exemplo 3.5 dá o resumo por região:
M10: =SOMA(tbl_Base[Receita]) → 5.511.332,46
M11: =SOMARPRODUTO(tbl_Base[Qtd];tbl_Base[PrecoUnit]) → 5.476.200,30
M12: =LINS(tbl_Base) → 181
M13: =LINS(ÚNICO(tbl_Base)) → 180
M14: =TEXTO(MÍNIMO(tbl_Base[Data]);"dd/mm/aa")&" a "&
TEXTO(MÁXIMO(tbl_Base[Data]);"dd/mm/aa")
L17: =AGRUPARPOR(PRI.MAIÚSCULA(ARRUMAR(tbl_Base[Regiao]));tbl_Base[Receita];SOMA;0;1;-2)
ÚNICO aplicado à Tabela inteira devolve as linhas distintas; a diferença entre LINS(tbl_Base) e LINS(ÚNICO(tbl_Base)) é o número de duplicatas exatas.
Três achados de negócio, cada um com o seu número.
- O Sudeste lidera com folga: R$ 1.770.133,62, 32,1% da receita, com 64 das 181 vendas.
- O Centro-Oeste tem poucas vendas e ticket muito alto: 8 vendas, R$ 987.862,53, ticket de R$ 123.482,82, quatro vezes o ticket geral de R$ 30.449,35. Uma única venda (linha 28) vale R$ 253.543,08.
- Eletrônicos é a maior categoria: R$ 1.707.501,39, 31,0% da receita.
Conferência de um achado na mão. O achado 3: =SOMASES(tbl_Base[Receita];tbl_Base[Categoria];"Eletrônicos") devolve 1.707.501,39; dividido por 5.511.332,46, dá 31,0%. Bateu.
Desafio: Região × Categoria. Com PIVOTPOR (PIVOTBY), também exclusiva do Microsoft 365:
=PIVOTPOR(PRI.MAIÚSCULA(ARRUMAR(tbl_Base[Regiao]));tbl_Base[Categoria];
tbl_Base[Receita];SOMA)
| Região | Casa | Eletrônicos | Escritório | Esporte | Total |
|---|---|---|---|---|---|
| Centro-Oeste | 198.653,04 | 306.919,62 | 306.795,72 | 175.494,15 | 987.862,53 |
| Nordeste | 361.530,49 | 349.097,25 | 121.828,04 | 253.123,49 | 1.085.579,27 |
| Norte | 124.962,31 | 278.269,32 | 338.817,30 | 257.567,05 | 999.615,98 |
| Sudeste | 256.230,16 | 561.676,91 | 337.122,83 | 615.103,72 | 1.770.133,62 |
| Sul | 186.391,48 | 211.538,29 | 255.863,91 | 14.347,38 | 668.141,06 |
| Total | 1.127.767,48 | 1.707.501,39 | 1.360.427,80 | 1.315.635,79 | 5.511.332,46 |
Tabela 3.19. Receita por Região (padronizada) e Categoria. O total geral bate com a SOMA da coluna Receita.
A validação é a última linha: a soma das categorias e a soma das regiões dão os mesmos R$ 5.511.332,46 da base. Um achado que salta da tabela: o Sul quase não vende Esporte (R$ 14.347,38).
Em aula, depois do diagnóstico, o professor pediu ao assistente que corrigisse a base, e ele corrigiu. Mas a base do mês seguinte vai chegar com os mesmos problemas, e a correção terá de ser pedida de novo, gastando cota e exigindo nova conferência. A correção é um processo determinístico: peça uma vez o Power Query ou o script que padroniza, e rode todo mês. É o Exercício 2.
Exercício 2: peça o código, não a resposta (abas E2_Automacao e E4_Prompt)
Tarefa: escrever o prompt no padrão CONTEXTO / TAREFA / REQUISITOS / ACEITE para o processo especificado na aba E2_Automacao, pedir a solução em VBA e em Python, comparar e decidir qual levar para produção. Desafio: a versão em Power Query.
A especificação da aba: origem na Tabela tbl_Base; saída numa aba "Resumo" da mesma pasta; receita total por Região, da maior para a menor; padronizar a Região (espaços e caixa) antes de somar; cabeçalho em negrito e receita como moeda; idempotência; e, se a base estiver vazia, avisar e não quebrar.
Passo 1: o prompt. Na aba E4_Prompt, a coluna "O SEU caso" fica assim (a versão completa é a da Figura 3.4):
Passo 2: a macro VBA. Uma resposta que atende à especificação:
Option Explicit
' Gera a aba Resumo: receita total por Região, da maior para a menor
Sub AtualizarResumo()
Dim lo As ListObject, ws As Worksheet, dic As Object
Dim dados As Variant, i As Long, lin As Long, k As Variant
Dim cReg As Long, cRec As Long, reg As String
Dim wf As WorksheetFunction
Set lo = ThisWorkbook.Worksheets("E1_Base").ListObjects("tbl_Base")
' 1. Caso vazio: avisar e sair sem quebrar
If lo.DataBodyRange Is Nothing Then
MsgBox "A base está vazia: nada a resumir.", vbInformation
Exit Sub
End If
' 2. Somar a Receita por Região padronizada (ARRUMAR + PRI.MAIÚSCULA)
cReg = lo.ListColumns("Regiao").Index
cRec = lo.ListColumns("Receita").Index
dados = lo.DataBodyRange.Value
Set dic = CreateObject("Scripting.Dictionary")
Set wf = Application.WorksheetFunction
For i = 1 To UBound(dados, 1)
reg = wf.Proper(wf.Trim(dados(i, cReg)))
dic(reg) = dic(reg) + dados(i, cRec)
Next i
' 3. Criar a aba Resumo ou limpar a que já existe (idempotência)
On Error Resume Next
Set ws = ThisWorkbook.Worksheets("Resumo")
On Error GoTo 0
If ws Is Nothing Then
Set ws = ThisWorkbook.Worksheets.Add( _
After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
ws.Name = "Resumo"
Else
ws.Cells.Clear
End If
' 4. Escrever cabeçalho e valores a partir de B2
ws.Range("B2:C2").Value = Array("Região", "Receita")
lin = 3
For Each k In dic.Keys
ws.Cells(lin, "B").Value = k
ws.Cells(lin, "C").Value = dic(k)
lin = lin + 1
Next k
' 5. Ordenar da maior para a menor e formatar
ws.Range("B2:C" & lin - 1).Sort Key1:=ws.Range("C2"), _
Order1:=xlDescending, Header:=xlYes
ws.Range("B2:C2").Font.Bold = True
ws.Range("C3:C" & lin - 1).NumberFormat = "[$R$-pt-BR] #,##0.00"
ws.Columns("B:C").AutoFit
End Sub
Pontos para conferir ao ler o código, mesmo sem dominar VBA: o Option Explicit está no topo; não há Select nem Activate; a Região passa por Trim e Proper (as mesmas ARRUMAR e PRI.MAIÚSCULA da planilha) antes de virar chave da soma; a aba é limpa se já existir, o que garante a idempotência; o caso vazio sai com aviso. O formato de número em VBA usa a notação americana (vírgula para milhar, ponto para decimal); o Excel exibe no padrão brasileiro. O arquivo precisa ser salvo como .xlsm.
Passo 3: o script Python. Mesmo processo, com pandas e openpyxl, seguindo o pedido da aba Prompts_Uteis (caminho como parâmetro, arquivo de saída novo, log e tratamento de erro):
# resumo_regiao.py - receita total por Região, da maior para a menor
import sys, logging
from pathlib import Path
import pandas as pd
from openpyxl.styles import Font
ARQUIVO = Path(sys.argv[1] if len(sys.argv) > 1 else "EBP_AI_Exercicios_2026_Aluno.xlsx")
# arquivo novo ao lado do original; o original não é tocado
SAIDA = ARQUIVO.with_name(ARQUIVO.stem + "_resumo.xlsx")
logging.basicConfig(filename=ARQUIVO.with_name("resumo_regiao.log"), level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s")
try:
# 1. Ler a tbl_Base (cabeçalho na linha 9 da aba E1_Base, colunas B a I)
base = pd.read_excel(ARQUIVO, sheet_name="E1_Base", header=8, usecols="B:I")
base = base.dropna(how="all")
if base.empty:
logging.warning("Base vazia: nada a resumir."); print("Base vazia."); sys.exit(0)
# 2. Padronizar a Região: tirar espaços e uniformizar a caixa
base["Regiao"] = base["Regiao"].astype(str).str.strip().str.title()
# 3. Somar a Receita por Região e ordenar da maior para a menor
resumo = (base.groupby("Regiao", as_index=False)["Receita"].sum()
.sort_values("Receita", ascending=False))
# 4. Gravar a aba Resumo num arquivo novo (sobrescreve: rodar 2x dá o mesmo arquivo)
with pd.ExcelWriter(SAIDA, engine="openpyxl") as xl:
resumo.to_excel(xl, sheet_name="Resumo", index=False)
ws = xl.sheets["Resumo"]
for cel in ws[1]: cel.font = Font(bold=True)
for (cel,) in ws.iter_rows(min_row=2, min_col=2, max_col=2):
cel.number_format = '"R$" #,##0.00'
logging.info("OK: %d linhas lidas, %d regiões, total %.2f",
len(base), len(resumo), resumo["Receita"].sum())
print(resumo.to_string(index=False))
except Exception as e:
logging.exception("Falhou: %s", e); raise
Rodado sobre o arquivo do aluno, o script lê 181 linhas, encontra 5 regiões e grava no log o total de 5.511.332,46. Rodado duas vezes, produz o mesmo arquivo.
Passo 4: conferir contra a base. As duas saídas devem dar o mesmo resultado, e o total deve bater com =SOMA(tbl_Base[Receita]):
Passo 5: comparar e decidir. A aba E2_Automacao pede três anotações:
| Critério | VBA | Python |
|---|---|---|
| Onde grava | Na própria pasta (aba Resumo), como pede a especificação | Num arquivo novo, ao lado do original |
| O que precisa | Excel aberto e arquivo .xlsm | Python, pandas e openpyxl instalados |
| Como roda | Botão na planilha, ou PowerShell + Agendador com usuário conectado | Agendador, mesmo com a máquina bloqueada |
| Segurança | Macro pode ser bloqueada em arquivo vindo de fora | Script fica fora da planilha |
Tabela 3.20. VBA × Python para o processo do Exercício 2.
As duas são boas respostas, e a escolha depende do uso. Se quem roda é o próprio analista, com a pasta aberta, o VBA atende exatamente à especificação. Se a rotina precisa rodar de madrugada, sem ninguém, o Python é o caminho, com a ressalva de que ele grava num arquivo novo: o próprio material recomenda não editar o modelo com openpyxl, que não recalcula fórmulas.
Desafio: Power Query. O código M equivalente, para colar numa consulta em branco:
let
Fonte = Excel.CurrentWorkbook(){[Name="tbl_Base"]}[Content],
Tipos = Table.TransformColumnTypes(Fonte, {{"Receita", type number}}),
Regiao = Table.TransformColumns(Tipos,
{{"Regiao", each Text.Proper(Text.Trim(_)), type text}}),
Agrupado = Table.Group(Regiao, {"Regiao"},
{{"Receita", each List.Sum([Receita]), type number}}),
Ordenado = Table.Sort(Agrupado, {{"Receita", Order.Descending}})
in
Ordenado
Carregada como Tabela numa aba Resumo, a consulta é idempotente por natureza: cada Atualizar refaz o resultado do zero. Para esse processo, que é tratamento e resumo de dados dentro da pasta, o Power Query é a opção mais simples de manter, e dispensa .xlsm.
Exercício 3: auditoria de uma análise da IA (aba E3_Auditoria)
Tarefa: a aba traz um relatório "gerado por IA" sobre a base E1_Base, com cinco achados. Quatro estão errados, de tipos diferentes. Para cada um: está certo? Qual o erro e como você percebeu? Qual o número correto e de onde ele veio? O exercício é igual nas duas trilhas e funciona sem internet. Desafio: a mensagem que você mandaria de volta para a IA.
Passo 1: montar a conferência com fórmulas, ao lado do relatório:
H12: =SOMA(tbl_Base[Receita]) → 5.511.332,46
H13: =SOMA(tbl_Base[Receita]*
(PRI.MAIÚSCULA(ARRUMAR(tbl_Base[Regiao]))="Sudeste")) → 1.770.133,62
H14: =H12/LINS(tbl_Base) → 30.449,35
H15: =H13/H12 → 32,1%
H16: =LINS(tbl_Base)-LINS(ÚNICO(tbl_Base)) → 1
A fórmula de H13 multiplica a coluna Receita por um teste lógico (VERDADEIRO vale 1, FALSO vale 0) e soma: é a soma condicional com a Região padronizada, que o SOMASES sozinho não faz.
Passo 2: analisar cada achado.
Achado 1 · Receita total de R$ 5.979.795,72. Errado: soma que não fecha com a base. A soma da coluna Receita dá R$ 5.511.332,46. A diferença é de R$ 468.463,26, 8,5% a mais, e não corresponde a nenhum caminho razoável: Qtd × PrecoUnit dá 5.476.200,30 e a soma sem a duplicata, 5.487.943,71. Como perceber: conferir o total contra a fonte, a primeira linha do checklist.
Achado 2 · Região líder Sudeste, com R$ 1.770.133,62. Certo. O número confere com a Região padronizada (inclui a venda de R$ 6.082,35 grafada "sudeste"). Sem padronizar, o Sudeste teria R$ 1.764.051,27, e continuaria líder.
Achado 3 · Ticket médio de R$ 45.354,17 como média dos tickets das 5 regiões. Errado: média de médias. O ticket médio geral é receita total ÷ número de vendas: 5.511.332,46 ÷ 181 = R$ 30.449,35. A média simples dos cinco tickets regionais dá o mesmo peso ao Centro-Oeste, com 8 vendas e ticket de R$ 123.482,82, e ao Sudeste, com 64 vendas, e por isso infla o resultado.
Achado 4 · A líder representa 29,6% do total. Errado: percentual sobre a base errada. 1.770.133,62 ÷ 5.979.795,72 = 29,6%: a conta usa o total errado do achado 1, e o próprio relatório avisa isso entre parênteses. Sobre o total correto: 1.770.133,62 ÷ 5.511.332,46 = 32,1%. Como perceber: perguntar "percentual de quê, exatamente?".
Achado 5 · 180 registros únicos, sem duplicatas, pronta para análise. Errado: afirmação sem número por trás. A base tem 181 linhas, das quais 180 são únicas porque há 1 duplicata (linhas 13 e 190). Além disso, há três grafias de região fora do padrão, um produto com espaço duplo e duas linhas com Qtd ou PrecoUnit zerados. A frase mistura um número quase certo (180 únicos) com uma conclusão falsa (sem duplicatas, pronta).
Passo 3: preencher a tabela da auditoria.
| Achado | Certo? | Tipo de erro | Número correto |
|---|---|---|---|
| 1 | Não | Soma que não fecha com a base | R$ 5.511.332,46 |
| 2 | Sim | R$ 1.770.133,62 | |
| 3 | Não | Média de médias | R$ 30.449,35 |
| 4 | Não | Percentual sobre a base errada | 32,1% |
| 5 | Não | Afirmação sem número (qualidade da base) | 181 linhas, 1 duplicata, 180 únicas |
Tabela 3.21. Resultado da auditoria do Exercício 3. Fonte de todos os números: a coluna Receita da aba E1_Base, com todas as linhas.
Desafio: a mensagem de volta para a IA. Específica, com o erro exato de cada item, sem recomeçar do zero:
Revise o relatório. Quatro achados estão errados:
1. O total não bate com =SOMA(tbl_Base[Receita]), que dá R$ 5.511.332,46.
Mostre a fórmula que você usou.
3. Ticket médio é receita total ÷ número de vendas (181), não a média dos
tickets regionais. Refaça como média ponderada.
4. Recalcule a participação do Sudeste sobre o total correto.
5. A base tem uma linha duplicada (13 e 190), três grafias de região fora
do padrão e duas linhas com Qtd ou PrecoUnit zerados. Liste-as.
Para cada número, informe a fórmula que o gera.
Exercício 4: o seu CLAUDE.md (aba E5_CLAUDE_md)
Tarefa: copiar o modelo de CLAUDE.md da aba para um arquivo na raiz da pasta do projeto e acrescentar as convenções da sua área (nomes de arquivo, formato de data, glossário de siglas).
O modelo tem seis seções: o título do projeto, O que é (uma ou duas linhas sobre a pergunta de negócio), Onde estão as coisas (a estrutura de pastas), Convenções de planilha (Tabelas com tbl_, grade desligada, início em B2, input em amarelo, nada de valor fixo no cálculo, fórmulas modernas), Como quero as respostas (em português, código comentado, opções com prós e contras, avisar antes de mudar arquivo) e Nunca fazer (editar dados/brutos/, sobrescrever saída sem avisar, inventar número).
Para preencher: troque o título e a descrição pelo seu projeto e acrescente, no fim, uma seção com as convenções da área. Mantenha cada linha curta e acionável.
O que não entra: instruções de uma tarefa só ("hoje, gere o relatório de março"). Elas vão no prompt. Procedimentos longos e específicos (o passo a passo do fechamento mensal, por exemplo) vão numa skill, que só é carregada quando chamada. O CLAUDE.md é lido em toda interação; cada linha a mais é custo e ruído em todas elas.
- Determinístico (mesma entrada, mesma saída) → peça o código. Estocástico (saídas variam) → peça a resposta e revise.
- A IA que constrói deixa um processo auditável, reproduzível e de custo zero por execução, que sobrevive à troca de ferramenta.
- Escolha a ferramenta pelo lugar do dado e pelo tipo de pergunta: análise sobre cópia para explorar; IA dentro do Excel para o modelo aberto; agente para lotes de arquivos; código para o que se repete.
- Assinatura serve ao trabalho interativo; a API, ao que roda sem ninguém lendo cada resposta. Processo determinístico não precisa de nenhuma das duas para rodar.
- O prompt que funciona tem CONTEXTO, TAREFA, REQUISITOS e ACEITE, e informa a versão e o idioma do Excel.
- Power Query para tratar dados recorrentes; VBA para botão na pasta; Python para rodar sem o Excel; PowerShell no lugar do .vbs; Power Automate entre sistemas. Às vezes basta uma fórmula como AGRUPARPOR.
- A IA erra com confiança: confira o total contra a fonte, prefira média ponderada, pergunte "percentual de quê", verifique duplicatas e período, e exija o caminho até cada número.
- Dado sensível não sobe sem anonimizar; prefira pedir o código e rodar localmente.
- Uma conversa por tarefa, prompt específico e um CLAUDE.md curto economizam tokens e melhoram as respostas.
- Automação precisa de monitoramento: aviso no sucesso e na falha, com um número de sanidade.
3.8Exercícios propostos
Use o arquivo EBP_AI_Exercicios_2026_Aluno.xlsx, aba E1_Base, quando houver números.
- Classifique como determinístico ou estocástico e diga o que pedir à IA: (a) conciliar o extrato bancário com o razão; (b) redigir a ata de uma reunião a partir da transcrição; (c) calcular o IR retido de cada nota pela tabela vigente; (d) sugerir nomes para um novo produto.
- Um fluxo vai, toda madrugada, ler os e-mails de clientes do dia e gravar numa planilha um resumo de cada um. Assinatura ou API? E se, em vez de resumir, o fluxo apenas copiasse o anexo para uma pasta?
- Escreva uma fórmula que calcule o ticket médio da região Norte padronizada (receita ÷ número de vendas) e dê o resultado. Compare com o que se obtém usando SOMASES e CONT.SES com o critério "Norte".
- Qual vendedor tem a maior receita e qual a participação dele no total? Quantas vendas ele fez?
- Uma IA afirma: "o ticket médio de Esporte é maior que o de Eletrônicos". Confira com fórmulas e dê os dois tickets.
- Reescreva o pedido "faz um Power Query que junta as planilhas da pasta" no padrão CONTEXTO / TAREFA / REQUISITOS / ACEITE. Invente os detalhes que faltarem.
- Qual o efeito, em reais e em percentual do total, de remover a linha duplicada da base? Qual seria o total sem ela?
- Uma IA calculou a receita média mensal como a média das receitas de janeiro a junho. Por que esse número é enganoso nesta base? Calcule a média de janeiro a maio.
- Liste três itens que entram e dois que não entram no CLAUDE.md de um projeto de fechamento mensal.
Material de apoio às aulas, de uso exclusivo dos alunos da BTC. É proibido reproduzir ou compartilhar este conteúdo sem autorização expressa da BTC. Ler o disclaimer