O que Tabelas de Sensibilidade (Uma e Duas Variáveis) faz?
Quando usar
Use quando um modelo estratégico ou financeiro tiver uma única saída principal e você quiser mostrar como essa saída responde à variação de um ou dois direcionadores em uma faixa de valores. Os direcionadores típicos são preço, volume, taxa de desconto, crescimento, churn ou custo por unidade. Esta skill CONSTRÓI um arquivo .xlsx para download a partir do zero no aplicativo Claude (openpyxl mais numpy), com fórmulas vivas e uma etapa de recálculo e verificação. Não é o suplemento Claude para Excel.
O que constrói
Uma aba Sensitivity única que se conecta a um modelo existente. Ela referencia as células de entrada e a célula de saída do modelo, organiza grades de uma variável e duas variáveis e aplica escala de cores ao bloco de resultados. Se o modelo de origem estiver em outra planilha, a grade se vincula a ele com referências entre planilhas, mantendo-se viva.
Fluxo de construção
- Identifique a célula de saída (por exemplo,
Model!B40contendo VPL) e as uma ou duas células de entrada que a direcionam (por exemplo,Model!B6taxa de desconto,Model!B7crescimento). - Confirme que a saída é uma cadeia de fórmulas vivas de volta para essas entradas. Se a saída for um valor fixo, pare e conecte o modelo primeiro; uma Tabela de Dados sobre uma constante retorna a constante.
- Escolha faixas de entrada em torno do caso base (por exemplo, taxa de desconto base 10%, varredura de 6% a 14% em passos de 2%).
- Construa a estrutura nativa da Tabela de Dados do Excel: fórmula de canto, eixos de entrada e a matriz
{=TABLE(r,c)}(consulte a especificação). - Construa TAMBÉM a grade computada em código como fallback robusto: reavalie o modelo em Python para cada combinação de entrada e escreva os valores resultantes como uma matriz rotulada.
- Aplique uma escala de 3 cores ao bloco de resultados e rotule ambos os eixos com os nomes das células de entrada.
- Adicione o bloco de Verificações.
- Recalcule a pasta de trabalho em um motor real (LibreOffice headless).
- Verifique zero erros de fórmula (#REF!, #DIV/0!, #VALUE!, #NAME?), confirme que as verificações passam e entregue o arquivo .xlsx.
Especificação aba por aba
Aba Sensitivity, bloco de uma variável
Escolha uma direção de layout. Para entradas descendo uma COLUNA:
B3: a fórmula de saída, referenciando a saída viva:=Model!B40. Esta é a célula de canto.A4:A10: os valores de entrada que você varre (entradas azuis), por exemplo, 6%, 8%, 10%, 12%, 14%.B4:B10: a coluna de resultados da Tabela de Dados.- Selecione
A3:B10, depois Dados > Análise de hipóteses > Tabela de Dados, deixando Célula de entrada da linha em branco e definindo Célula de entrada da coluna comoModel!B6. O Excel escreve{=TABLE(,Model!B6)}emB4:B10. - openpyxl pode escrever a string de fórmula de matriz
=TABLE(,Model!B6)no bloco e o canto=Model!B40, mas os valores só populam após o recálculo em um motor real.
Fallback computado em código para o mesmo bloco (recomendado ao gerar por código), escrito como uma matriz rotulada abaixo, por exemplo, começando em A14:
A14: rótulo "Taxa de desconto".B14: "VPL (computado)".- Para cada valor de entrada em
A15:A21, o Python defineModel!B6para esse valor, recalcula a lógica do modelo em numpy e escreve o VPL resultante como um valor simples na coluna B. - Mantenha ambos: a Tabela de Dados nativa prova que está viva; a matriz computada garante números populados mesmo antes de o usuário abrir o Excel.
Aba Sensitivity, bloco de duas variáveis
- Célula de canto
E3:=Model!B40(a saída viva). E4:E10: valores de entrada da linha descendo pela borda esquerda (primeiro direcionador, por exemplo, crescimento 0%, 1%, ... 6%).F3:L3: valores de entrada da coluna cruzando a linha superior (segundo direcionador, por exemplo, taxa de desconto 6% ... 14%).- Selecione
E3:L10, Dados > Análise de hipóteses > Tabela de Dados, Célula de entrada da linha =Model!B7(direcionador transversal), Célula de entrada da coluna =Model!B6(direcionador vertical). O Excel preencheF4:L10com{=TABLE(Model!B7,Model!B6)}. - Observe a orientação: a célula ligada à LINHA superior vai em Célula de entrada da linha; a célula ligada à COLUNA esquerda vai em Célula de entrada da coluna. Invertê-las transpõe o resultado silenciosamente.
- Fallback computado em código: um loop duplo em Python sobre ambos os eixos, escrevendo a matriz de valores em um bloco rotulado (cabeçalhos dos eixos em verde se puxam do modelo, azuis se são valores literais de varredura).
Escolhendo faixas de eixos
- Centralize cada eixo no valor do caso base para que o valor base fique na linha e coluna do meio, tornando a verificação da célula central significativa.
- Use um número ímpar de passos (5, 7 ou 9) para que uma única célula do meio se alinhe exatamente com o caso base, em vez de cair entre duas células.
- Mantenha tamanhos de passo uniformes em cada eixo (incremento constante) para que a grade seja lida como um gradiente limpo e a escala de cores seja interpretável.
- Para taxas, varra em pontos absolutos (8%, 10%, 12%), não em porcentagem relativa ao base, para evitar confundir os leitores.
Notas de construção com openpyxl
- Escreva o canto como uma string de fórmula real:
ws["B3"] = "=Model!B40". Não cole o valor numérico atual da saída. - Para a matriz nativa da Tabela de Dados, openpyxl pode armazenar o texto
=TABLE(...), mas um motor real deve recalcular para preencher o bloco; trate a matriz como um espaço reservado até que a etapa de recálculo seja executada. - Ao escrever o fallback computado, defina os valores de dados com Python (
ws.cell(row=r, column=c, value=float(vpl))) e mantenha-os visualmente distintos do bloco vivo com uma nota de cabeçalho como "snapshot computado". - Aplique a escala de cores com
openpyxl.formatting.rule.ColorScaleRulesobre o bloco de resultados, mapeando o mínimo para uma cor e o máximo para outra através de um ponto médio.
Convenções de fórmula e formatação
- Fonte azul para entradas (os valores do eixo varrido que você digita).
- Fonte preta para fórmulas na aba.
- Fonte verde para links entre planilhas, como
=Model!B40. - Sem valores fixos onde uma fórmula pertence: a célula de canto deve ser
=Model!B40, nunca o número do caso base digitado. - Uma fórmula consistente por linha ou coluna: todo o bloco da Tabela de Dados é uma única matriz; o fallback computado usa uma expressão Python aplicada em toda a grade.
- Formatos de número: taxas como
0.0%, saídas em moeda como#,##0, índices como0.00. Os valores do eixo correspondem à unidade da célula de entrada que substituem.
Verificações
- Célula de canto igual à saída viva:
=(B3=Model!B40)retorna VERDADEIRO. - Eixos rotulados com os nomes das células de entrada (um rótulo de texto acima ou ao lado de cada eixo nomeando o direcionador e seu endereço de célula).
- Centro da grade corresponde ao caso base: a célula da grade na linha e coluna do caso base é igual à saída atual do modelo,
=(<célula central>=Model!B40)VERDADEIRO. - Para o fallback computado, a célula nas entradas base é igual à célula da Tabela de Dados nativa nas mesmas entradas (dentro do arredondamento).
Recalcular e verificar
Salve com openpyxl, depois recalcule headless (por exemplo, libreoffice --headless --convert-to xlsx) para que =TABLE(...) e links entre planilhas sejam populados. Recarregue e escaneie cada célula em busca de #REF!, #DIV/0!, #VALUE!, #NAME?. Confirme que as três verificações retornam VERDADEIRO. Se algum erro ou FALSO aparecer, corrija a referência ou o intervalo e repita até ficar limpo, depois entregue.
Entradas a coletar
- Caminho para o modelo de origem e o endereço exato da célula de saída.
- Os endereços de uma ou duas células de entrada a varrer.
- Valores do caso base e a faixa e passo desejados para cada eixo.
- Unidades e formatos de número preferidos para eixos e saída.
Exemplo
Modelo hipotético: Model!B40 = VPL do projeto, direcionado por Model!B6 taxa de desconto (base 10%) e Model!B7 crescimento da receita (base 3%). O bloco de uma variável varre a taxa de desconto de 6% a 14% em intervalos de 2%, resultando em VPL de (por exemplo) 1.210 / 980 / 760 / 560 / 380 em unidades hipotéticas. O bloco de duas variáveis cruza crescimento de 0% a 6% contra taxa de desconto de 6% a 14%; a célula central em 3% de crescimento e 10% de desconto é igual a Model!B40 de 760, confirmando que o caso base está no meio da grade.