Avanço Previsto no MS Project: como inserir a fórmula, passo a passo
Por que isso não vem pronto
O MS Project traz os campos % Concluída, % Trabalho Concluída e % Física Concluída — todos medem o que já foi realizado. Não existe, nativamente, uma coluna "Avanço Previsto" que responda à pergunta que todo gerente de obra faz na reunião mensal: "nesta data, quanto do projeto eu deveria ter concluído?"
Sem essa coluna não há como calcular o desvio de avanço (realizado − previsto), o indicador básico de controle de prazo. A boa notícia: o Project já guarda toda a informação necessária na linha de base; falta apenas montar um campo personalizado que a use.
Este artigo apresenta cinco opções, da mais simples à mais precisa, com os caminhos de menu e os campos a preencher em cada uma.
Pré-requisitos: sem isso, nenhuma opção funciona
Três configurações precisam estar corretas antes de qualquer fórmula. Se o resultado der zero em todas as linhas, quase sempre a causa está aqui.
1. Linha de base salva
| Item | Preenchimento |
|---|---|
| Caminho | Guia Projeto → grupo Agenda → Definir Linha de Base → Definir Linha de Base |
| Campo "Definir linha de base" | Linha de base (a original, não Linha de base 1..10) |
| Campo "Para" | Projeto inteiro |
| Conferência | Insira a coluna Duração da Linha de Base e verifique que não está vazia |
Sem linha de base, Início da Linha de Base e Duração da Linha de Base ficam vazios e a fórmula devolve zero.
2. Data de status definida
| Item | Preenchimento |
|---|---|
| Caminho | Guia Projeto → grupo Propriedades → Informações do Projeto |
| Campo "Data de status" | A data-corte da medição (ex.: 31/07/2026). Não deixe em "ND" |
| Observação | Com "ND", o Project usa a data atual em alguns cálculos e "ND" em outros — fonte clássica de inconsistência |
Atualize esse campo a cada medição. É ele que define o "hoje" do cálculo.
3. Critério de ponderação decidido
Antes de escolher a fórmula, decida como o avanço é medido na sua obra:
- Por duração — cada tarefa avança linearmente no tempo. Simples, mas assume que uma tarefa de 30 dias está 50% pronta no dia 15, o que raramente é verdade em serviços com mobilização pesada.
- Por custo — o avanço acompanha o desembolso planejado. Reproduz a curva S real e é o critério contratual usual em medições físico-financeiras.
- Por trabalho (homens-hora) — o avanço acompanha o esforço planejado. Adequado quando a mão de obra domina o escopo.
A Opção 1 usa duração; as Opções 2 e 3 usam custo e trabalho.
Opção 1 — Fórmula linear por duração
A mais rápida de implementar e suficiente para a maioria dos cronogramas de porte médio.
Caminho completo
- Guia Projeto → grupo Propriedades → Campos Personalizados
- No topo do diálogo:
- Campo: Tarefa
- Tipo: Número
- Na lista, selecione Número1
- Renomear... → digite
Avanço Previsto (%)→ OK - Em Atributos personalizados, marque Fórmula... → monte a fórmula abaixo
- Em Cálculo para linhas de resumo de tarefa e de grupo, marque Usar fórmula
- Em Valores a serem exibidos, deixe Dados
- OK → OK
A fórmula
IIf([Duração da Linha de Base]=0;
IIf([Custo da Linha de Base]=0 E [Trabalho da Linha de Base]=0; 0;
IIf([Data de Status]>=[Término da Linha de Base]; 100; 0));
IIf([Data de Status]>=[Término da Linha de Base]; 100;
IIf([Data de Status]<=[Início da Linha de Base]; 0;
100*ProjDateDiff([Início da Linha de Base];[Data de Status])/[Duração da Linha de Base])))
Se a sua instalação não aceitar o operador
E, useAnd. O Project não traduz operadores lógicos de forma consistente entre versões — teste comAndprimeiro.
Como a fórmula funciona, ramo por ramo
| Trecho | O que faz |
|---|---|
[Duração da Linha de Base]=0 |
Captura dois casos de uma vez: tarefas sem linha de base e marcos (duração zero) |
[Custo da Linha de Base]=0 And [Trabalho da Linha de Base]=0 |
Distingue os dois: sem linha de base salva, tudo é zero → retorna 0. Um marco real tem data de linha de base válida e cai no ramo seguinte |
[Data de Status]>=[Término da Linha de Base] → 100 |
Tarefa (ou marco) que já deveria ter terminado → 100% previsto |
[Data de Status]<=[Início da Linha de Base] → 0 |
Tarefa que ainda não deveria ter começado → 0% previsto |
ProjDateDiff(início; status) |
Tempo útil decorrido, em minutos, respeitando o calendário do projeto |
/[Duração da Linha de Base] |
Divide pela duração planejada (também em minutos) — a razão é adimensional |
100* |
Converte fração em percentual: campos do tipo Número não têm formato "%" |
Repare que a ordem dos testes importa. Os dois testes de extremos vêm antes da divisão, o que garante que o resultado nunca ultrapasse 100 nem fique negativo, e que a divisão nunca ocorra com denominador zero.
Por que não usar ProjDateValue("ND") para testar campos vazios
É o padrão que mais circula na internet, mas depende do idioma da instalação ("NA" em inglês, "ND" em português) e falha silenciosamente quando a abreviação não bate. O teste por [Duração da Linha de Base]=0 é independente de idioma e cobre o mesmo caso.
Duas armadilhas de digitação
Não digite os nomes dos campos. Dentro do diálogo Fórmula, use o botão Campo → Data → Início da Linha de Base. Os nomes de campo são traduzidos conforme o idioma da instalação, e um nome em inglês numa instalação em português produz erro. Os nomes de função (IIf, ProjDateDiff) não mudam.
Confira o separador de argumentos. Instalações em português usam ponto e vírgula; em inglês, vírgula. Fórmula rejeitada sem motivo aparente costuma ser isso.
Inserir a coluna
Clique com o botão direito no cabeçalho de qualquer coluna → Inserir Coluna → digite Avanço Previsto (%).
Opção 2 — Ponderada por custo (COTA / BCWS) — a mais fiel
Tecnicamente superior. Em vez de assumir avanço linear, usa o COTA (Custo Orçado do Trabalho Agendado, BCWS em inglês), que o Project já distribui ao longo do tempo conforme a alocação real de recursos — ou seja, reproduz a curva S do cronograma.
Configuração prévia obrigatória
| Item | Preenchimento |
|---|---|
| Caminho | Arquivo → Opções → Avançado → seção Opções de valor agregado para este projeto |
| "Método padrão de valor agregado da tarefa" | % Concluída (ou % Física Concluída, se você mede fisicamente) |
| "Linha de base para cálculos de valor agregado" | Linha de base — precisa ser a mesma que você salvou |
A fórmula
Repita os passos 1 a 8 da Opção 1, usando Número2 renomeado para Avanço Previsto Custo (%):
IIf([Custo da Linha de Base]=0; 0; 100*[COTA]/[Custo da Linha de Base])
Insira
[COTA]pelo botão Campo → categoria Custo → COTA. Se a sua instalação usar outra abreviação, ela aparecerá nessa lista.
Por que esta é melhor
- Rola para cima corretamente. Em linhas de resumo, tanto o COTA quanto o Custo da Linha de Base são somas exatas das subtarefas.
- Respeita a distribuição real do esforço. Uma tarefa com mobilização lenta no início tem COTA baixo nas primeiras semanas, refletindo a realidade.
- É o critério contratual usual. Cronogramas físico-financeiros no Brasil normalmente são ponderados por valor.
- Trata marcos naturalmente. Um marco com custo associado entra na conta pelo valor; sem custo, não distorce nada.
Requisito: o cronograma precisa ter custos ou recursos alocados. Cronograma só de datas tem Custo da Linha de Base zero e a fórmula retorna zero — nesse caso, use a Opção 1 ou 3.
Opção 3 — Ponderada por trabalho (homens-hora)
Existe uma limitação estrutural que vale conhecer: fórmulas de campo personalizado não acessam dados distribuídos no tempo (timephased). Existe o campo COTA, que é custo acumulado até a data de status, mas não existe um equivalente para trabalho.
Há dois caminhos legítimos:
Caminho A — Proxy por taxa uniforme (só fórmula)
- Aloque todos os recursos com a mesma taxa horária (ex.: R$ 1,00/h para todos)
- Salve a linha de base
- Use a fórmula da Opção 2
Com taxa uniforme, custo e trabalho ficam proporcionais e o COTA passa a medir exatamente o avanço por homens-hora.
Caminho B — VBA lendo o trabalho distribuído no tempo
É o caminho correto quando o cronograma já tem custos reais e você não pode falsear as taxas. Veja a Opção 5, trocando a constante de custo pela de trabalho.
Opção 4 — Sem fórmula: tabela Valor Agregado
Se você só precisa ver os números uma vez, sem criar campos:
| Item | Preenchimento |
|---|---|
| Caminho | Guia Exibir → grupo Dados → Tabelas → Mais Tabelas... |
| Selecione | Valor Agregado → Aplicar |
| Leia a coluna | COTA — custo previsto acumulado até a data de status |
| Avanço previsto | COTA ÷ Custo da Linha de Base |
Vale também inserir IDP (Índice de Desempenho de Prazo, SPI) e VPR (Variação de Prazo, SV): IDP abaixo de 1,00 já indica atraso sem precisar de fórmula nenhuma.
Opção 5 — VBA, quando a fórmula não basta
Fórmulas têm um limite real: não enxergam dados distribuídos no tempo. Se você precisa do avanço previsto em uma data que não é a data de status atual — por exemplo, reconstruir a curva S mês a mês — só o VBA resolve.
Caminho: guia Desenvolvedor → Visual Basic. Se a guia não aparecer: Arquivo → Opções → Personalizar Faixa de Opções → marque Desenvolvedor. No editor: Inserir → Módulo, e cole o código.
Macro 1 — Avanço previsto em uma data qualquer
Option Explicit
Sub AvancoPrevistoNaData()
Dim t As Task
Dim tsv As TimeScaleValues
Dim v As TimeScaleValue
Dim sEntrada As String
Dim dCorte As Date
Dim cotaAcum As Double
Dim baseTotal As Double
sEntrada = InputBox("Data de corte:", "Avanço previsto", Format(Date, "Short Date"))
If Len(Trim(sEntrada)) = 0 Then Exit Sub
If Not IsDate(sEntrada) Then
MsgBox "Data inválida.", vbExclamation
Exit Sub
End If
dCorte = CDate(sEntrada)
If dCorte < ActiveProject.ProjectStart Then
MsgBox "Avanço previsto em " & Format(dCorte, "Short Date") & ": 0,0%", vbInformation
Exit Sub
End If
For Each t In ActiveProject.Tasks
If Not t Is Nothing Then
If Not t.Summary Then
If t.BaselineCost > 0 Then
baseTotal = baseTotal + t.BaselineCost
Set tsv = t.TimeScaleData(ActiveProject.ProjectStart, dCorte, _
pjTaskTimescaledBaselineCost, pjTimescaleDays)
For Each v In tsv
If Not IsNull(v.Value) Then
If v.Value <> "" Then cotaAcum = cotaAcum + CDbl(v.Value)
End If
Next v
End If
End If
End If
Next t
If baseTotal > 0 Then
MsgBox "Avanço previsto em " & Format(dCorte, "Short Date") & ": " & _
Format(cotaAcum / baseTotal, "0.0%"), vbInformation
Else
MsgBox "Nenhum custo de linha de base encontrado. " & _
"Salve a linha de base com recursos ou custos alocados.", vbExclamation
End If
End Sub
Para ponderar por trabalho em vez de custo, faça duas trocas:
pjTaskTimescaledBaselineCost→pjTaskTimescaledBaselineWorkt.BaselineCost→t.BaselineWork(nas duas ocorrências)
Macro 2 — Curva S prevista, mês a mês
Gera a série acumulada para colar no Excel. O resultado sai na janela Verificação Imediata (Ctrl+G no editor VBA).
Option Explicit
Sub CurvaSPrevistaMensal()
Dim t As Task
Dim tsv As TimeScaleValues
Dim v As TimeScaleValue
Dim periodo() As Double
Dim i As Long, n As Long
Dim baseTotal As Double, acum As Double
Dim dIni As Date, dFim As Date
dIni = ActiveProject.ProjectStart
dFim = ActiveProject.ProjectFinish
n = DateDiff("m", dIni, dFim) + 2
ReDim periodo(1 To n)
For Each t In ActiveProject.Tasks
If Not t Is Nothing Then
If Not t.Summary Then
If t.BaselineCost > 0 Then
baseTotal = baseTotal + t.BaselineCost
Set tsv = t.TimeScaleData(dIni, dFim, _
pjTaskTimescaledBaselineCost, pjTimescaleMonths)
i = 0
For Each v In tsv
i = i + 1
If i <= n Then
If Not IsNull(v.Value) Then
If v.Value <> "" Then periodo(i) = periodo(i) + CDbl(v.Value)
End If
End If
Next v
End If
End If
End If
Next t
If baseTotal <= 0 Then
MsgBox "Nenhum custo de linha de base encontrado.", vbExclamation
Exit Sub
End If
Debug.Print "Mês" & vbTab & "COTA do mês" & vbTab & "COTA acumulado" & vbTab & "Avanço previsto"
acum = 0
For i = 1 To n
acum = acum + periodo(i)
Debug.Print Format(DateAdd("m", i - 1, dIni), "mmm/yy") & vbTab & _
Format(periodo(i), "0.00") & vbTab & _
Format(acum, "0.00") & vbTab & _
Format(acum / baseTotal, "0.0%")
Next i
MsgBox "Curva S gerada na janela Verificação Imediata (Ctrl+G).", vbInformation
End Sub
Detalhe importante: as duas macros passam a mesma janela de datas (dIni, dFim) para todas as tarefas. Isso garante que TimeScaleData devolva o mesmo número de períodos por tarefa, permitindo somá-los posição a posição.
Campo complementar: o desvio de avanço
O avanço previsto sozinho não decide nada. Crie Número5 como Desvio de Avanço (p.p.):
[% Concluída]-[Número1]
Valor negativo = atraso, em pontos percentuais. Depois, no mesmo diálogo Campos Personalizados, clique em Indicadores Gráficos e configure, na aba Linhas não resumo:
| Teste | Valor | Imagem |
|---|---|---|
| é maior ou igual a | 0 | Círculo verde |
| é maior ou igual a | -5 | Círculo amarelo |
| é menor que | -5 | Círculo vermelho |
A ordem importa: o Project avalia os testes de cima para baixo e para no primeiro que for verdadeiro.
Armadilhas comuns
| Sintoma | Causa provável | Correção |
|---|---|---|
| Coluna toda zerada | Linha de base não salva | Projeto → Definir Linha de Base |
| Coluna zerada com linha de base salva | Data de status em "ND" | Projeto → Informações do Projeto |
| Fórmula rejeitada ao colar | Separador errado (, vs ;), operador E/And, ou nome de campo em outro idioma |
Use o botão Campo para inserir os nomes |
| Valores acima de 100 | Faltou o teste [Data de Status]>=[Término da Linha de Base] antes da divisão |
Reinsira a fórmula completa |
| Divisão por zero | Marco (duração zero) sem o ramo de proteção | Use a fórmula completa da Opção 1 |
| Linhas de resumo vazias | Cálculo de resumo em Nenhum | Marque Usar fórmula no diálogo |
| COTA todo zerado | Linha de base do valor agregado apontando para outra linha de base | Arquivo → Opções → Avançado |
| Valor não atualiza | Cálculo manual | Arquivo → Opções → Cronograma → Calcular projeto = Automático, ou tecle F9 |
Como validar que ficou certo
- Coloque a data de status um dia antes do início do projeto → todas as linhas devem marcar 0%.
- Coloque a data de status um dia depois do término da linha de base → todas devem marcar 100%.
- Coloque a data de status exatamente no meio da linha de base de uma tarefa longa e simples → a Opção 1 deve marcar ~50%.
- Crie um marco de teste com linha de base e verifique que ele alterna de 0% para 100% na data certa.
- Compare o avanço previsto da linha de resumo do projeto com a curva S do seu cronograma físico-financeiro.
Caminhos de menu referentes ao MS Project 2016 até o Microsoft Project Online Desktop Client. Em versões anteriores a 2010, Campos Personalizados fica em Ferramentas → Personalizar → Campos.