CÁLCULO DO PRÓXIMO DIA ÚTIL NO EXCEL

Tempos atrás, precisei desenvolver uma planilha para calcular a data de vencimento de títulos/duplicatas. Mas a regra era que este cálculo considerasse apenas os dias úteis, ou seja, de segunda-feira a sexta-feira, excluindo feriados (inclusive municipais e estaduais!), recessos, etc. Para este caso, as fórmulas padrão do Excel não funcionam.

Quebrei um pouco a cabeça mas consegui fazer algo simples e inteligente, sem desperdício de recursos. Vou explicar aqui como isso foi feito e deixarei um link para uma planilha de exemplo, para que vocês possam usar como referência
para aplicar em suas próprias planilhas.

Caso você já seja um expert ou apenas esteja com preguiça de ler, clique no link abaixo e faça o download do exemplo. Caso necessite ou queira aprender como a coisa toda funciona, siga em frente!

CLIQUE AQUI PARA BAIXAR A PLANILHA DE EXEMPLO (FORMATO .XLSX)

Indo mais a fundo

Daqui em diante, vou explicar detalhadamente como a fórmula funciona. Se você está lendo este artigo, é porque descobriu que não existe (ainda) uma fórmula mágica no Excel que calcule os feriados municipais/estaduais certo? Então vamos fazer a nossa!

A primeira coisa é construir uma tabela de feriados, assim poderemos mostrar ao Excel quais dias ele deve desconsiderar como dias úteis. Esta tabela pode ficar em uma aba oculta ou mesmo em colunas ocultas (no meu caso, na aplicação real, coloquei em uma  aba e ocultei).

OK, legal, mas a cada ano novo vou ter que ficar corrigindo esta tabela de feriados? Isso vai ser um saco! Também achei isso. Aí para evitar ter que ficar atualizando os feriados a cada ano, fiz um tipo de calendário permanente, inspirado em um que encontrei na internet, neste link e fiz algumas alterações para que atendesse ao propósito da planilha. Com este calendário permanente, basta informar o ano vigente e a mágica acontece. Ou a “matemática acontece”, como preferir. Assim, a única coisa que você precisa fazer é informar o ano, que pode estar em uma célula qualquer.

O próximo passo, era desenvolver uma fórmula que buscasse estas datas e usasse a data de vencimento informada como referência para o cálculo. Também precisava achar um jeito de desconsiderar os sábados e os domingos. Veja como ficou o pequeno monstro:

=SE(E(DIA.DA.SEMANA(G7)>1;DIA.DA.SEMANA(G7)<7;ÉERROS(PROCV(G7;$D$7:$D$26;1;FALSO)));G7;DIATRABALHO(G7;1;$D$7:$D$26))

Calma, não entre em pânico. Vou explicar passo a passo e quando você olhar a planilha de exemplo, vai ficar tudo mais claro.

Uma das coisas básicas para você entender Excel é aprender a ler as fórmulas “em português”. Isso facilita muito resolver seus problemas.

Pense o seguinte: Se você quer que uma fórmula faça algo, o primeiro passo é pensar em “bom português” o que você quer, depois tentar traduzir com uma fraseologia mais lógica (usando argumentos como SE, SENÃO, E, ENTÃO, OU, etc.) e finalmente tentar passar isso para o Excel através de fórmulas que fazem o que você quer. Mas aí já precisa estudar um pouco e se acostumar com os termos que o Excel usa.

Neste caso, fazendo a “tradução” para o português usual, teremos algo como:

“Se o dia do vencimento informado cair em um dia útil, verifique se este dia é feriado, sábado ou domingo. Se for, considere como data de vencimento o próximo dia útil, se não for, o dia de vencimento é o mesmo dia informado”

Certo, isso é o que querermos fazer. Agora, vamos pensar de forma diferente, usando um pensamento mais lógico, já imaginando o uso dos argumentos E, SE, ENTÃO E SENÃO:

SE o dia da semana for maior que 1 E também o dia da semana for menor que 7, E a procura da data de vencimento na tabela de feriados der um erro, ENTÃO FAÇA isso: “mostre a data de vencimento que está em G7”, SENÃO mostre o próximo dia útil após o feriado que está na tabela. ”

Piorou? Fique tranquilo, vamos passo a passo. Aqui estou assumindo que você tenha conhecimento intermediário das fórmulas do Excel, inclusive condicionais e lógicas (SE, SENÃO, E, OU, etc). Partindo deste princípio, vamos em frente.

É importante saber que para o Excel, cada dia da semana é representado por um número. Neste caso, como a semana começa no domingo, então domingo é o dia 1, segunda é o dia 2 e assim por diante, até chegar no 7º dia que é sábado. Então, quando quero saber que dia da semana é determinada data, uso a fórmula =DIA.DA.SEMANA(“Data”), onde “Data” pode ser uma referência a uma célula qualquer onde você digitou uma data, como A1, B3, etc.

A primeira parte (1) da fórmula faz esta validação:


Aqui estamos pedindo para o excel verificar se a data informada na célula G7 é maior que 1 (Domingo) E menor que 7 (sábado). Repare na função lógica “E” logo no começo. A função “E” somente será VERDADEIRA, se a data informada atender as duas condições. Como a função “E” está contida dentro da função condicional “SE”, a fórmula somente vai executar a primeira parte da função SE, caso o resultado da função “E” seja Verdadeiro. Por que? Porque a própria estrutura da função “SE” é que faz isso. Veja o que diz a ajuda do próprio Excel sobre isso:

SE(Algo for Verdadeiro, faça tal coisa, caso contrário, faça outra coisa)

Portanto, uma instrução SE pode ter dois resultados. O primeiro resultado é se a comparação for Verdadeira, o segundo se a comparação for Falsa.

Função real: =SE(teste_lógico;Valor se verdadeiro;Valor se falso)

Ficou mais claro agora? Esta primeira parte da nossa fórmula está então fazendo o “Teste lógico” da função SE. Um teste lógico é o que você faz para saber se algo é verdadeiro ou falso. No nosso caso, estamos “testando” se o dia da semana está entre 1 e 7, ou seja, está entre domingo (primeiro dia da semana) e sábado (último dia da semana). Se estiver entre 1 e 7 (Verdadeiro), executa a parte da função SE “Valor se verdadeiro”, se não estiver, executa a segunda parte da função SE “Valor se falso”.

Muito bem, vamos agora para a segunda parte da nossa fórmula:

ÉERROS(PROCV(G7;$D$7:$D$26;1;FALSO))

Aqui vamos fazer um PROCV na tabela de feriados. Vamos validar se a data informada na célula G7 está na tabela de feriados. Por padrão, a função PROCV retorna um erro “#N/D” quando não encontra o valor procurado. É justamente aqui o segredo: Se o PROCV não encontrar a data na tabela de feriados (der o erro #N/D), então a data não é feriado!

Vamos pedir para o Excel verificar justamente se o PROCV dá “erro” através da função ÉERROS. Então, caso o PROCV não encontre a data na tabela, vai mostrar “#N/D”, usando a função ÉERROS para validar, vamos ter como retorno o valor “Verdadeiro” caso seja um erro ou “Falso” caso encontre ou valor (se encontrar o valor, não é erro, certo?

Agora a terceira e última parte:

G7;DIATRABALHO.(G7;1;$D$7:$D$26)).

Aqui podemos ver o argumento “G7” logo no início. Isso quer dizer que: Caso as condições explicadas anteriormente forem todas VERDADEIRAS (Lembre-se da função “E” que está no começo: Ela somente dará resultado VERDADEIRO se TODAS os “testes” forem verdadeiros!), como esta função “E” está aninhada dentro de uma função “SE”, a primeira parte da fórmula vai executar ou mostrar algo somente se o resultado da expressão for Verdadeiro. Ou seja, caso a primeira parte seja Verdadeiro, a fórmula vai mostrar o conteúdo da célula G7, que é onde está a própria data que você informou.

Finalmente temos a função DIATRABALHO. Esta função vai nos dizer qual o próximo dia útil após determinada data (considerando sábados e domingos como “não úteis”, claro). Ela é bem simples e dispensa comentários. Resumidamente a sintaxe é:

=DIATRABALHO(DataInicial; Dias; Feriados)

  • DataInicial: é a data inicial das contagens de dias úteis naquele período.
  • Dias: é o total de dias úteis a contar antes ou depois da dataInicial
  • Feriados: é uma lista de datas que não devem ser consideradas dias úteis pela função.

No nosso caso, “Datainicial” é a data de vencimento que informamos na célula G7. “Dias” é 1 (um dia útil após a data informada) e “Feriados” será o intervalo que compõe nossa tabelinha de feriados.

Espero que estas informações possam ajudar você a ampliar seus conhecimentos e que possam ser úteis para você ser mais produtivo.

Esse post foi publicado em Sem categoria e marcado , , , , , , , , , , . Guardar link permanente.

19 respostas para CÁLCULO DO PRÓXIMO DIA ÚTIL NO EXCEL

  1. Anônimo disse:

    Pefeito, muito obrigada!
    Esta formula vai me salvar para calcular a data de pagamento de um imposto que prorroga.
    Porém, a maioria dos imposotos tem seu vencimento antecipado quando o vencimento não for data útil. (para imposto, considera sabado como não útil)

    Como faço para adaptar esta fórmula para trazer o dia útil anterior àquela data que caiu no final de semana ou feriado?

    Curtir

  2. Danila disse:

    olá Cristiano, gostaria de contato para cotar uma tabela de crono em Excel

    Curtir

  3. Aline Maciel disse:

    Boa tarde. Preciso de ajuda para adaptar essa fórmula na minha planilha de conciliação de cartão de crédito. O recebimento do cartão é D+1, então como referência eu uso a data da transação. Mas como eu consigo somar 1 dia útil mesmo nas datas que não caem nos sábados, domingos e feriados, dentro dessa mesma fórmula? Pois ela só soma se a data de referência não for dia útil.

    Curtir

  4. Humberto Jr disse:

    achei fantástica a forma de calcular , eu precisava só mais um detalhe : calcular +1 dia de segunda a sexta , calcular mais 3 dias de sabado e 2 de domingo . Acho que isso é impossível né ? Eu faço a conta do valor a receber + tempo de compensação boleto bancário que é 1 dia .

    Curtir

  5. Eduardo Rumin disse:

    CARA VC SALVOU MINHA VIDA! EXPLICAÇÃO PERFEITA!!! MUITO OBRIGADO

    Curtir

  6. Stephanne disse:

    Muito obrigada por compartilhar seu conhecimento!!!

    Curtir

  7. Dom Luiz Filipe M. Alves disse:

    irmão muito obrigado, fiz algumas melhoria para fazer ele ficar melhor e inclusive me trazer o segundo dia útil do mês

    Curtir

    • Dom Luiz Filipe M. Alves disse:

      Traz o segundo dia útil do mês
      =SE(E(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1))>1;DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1))<7;ÉERROS(PROCV(DATA(ANO(HOJE());MÊS(HOJE());1);$E$7:$E$30;1;FALSO)));DATA(ANO(HOJE());MÊS(HOJE());1)+SE(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1);1)=1;1;SE(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1);1)=7;2;));DIATRABALHO(DATA(ANO(HOJE());MÊS(HOJE());1);2;$E$7:$E$30))

      Curtido por 1 pessoa

  8. Erik disse:

    Amigo, ótima saída! Contudo, a base de dados de “Feriados” é restrita por ANO. Se eu tiver vários anos a frente para ajustar, precisarei replicar os feriados até 20XX. Por acaso já conseguiu alguma forma de deixar o ANO avariável, de acordo com o ano da célula comparativa? Ou mesmo só comparar o agrupamento DDMM ? Abraço!

    Curtido por 1 pessoa

    • Dom Luiz Filipe M. Alves disse:

      =SE(E(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1))>1;DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1))<7;ÉERROS(PROCV(DATA(ANO(HOJE());MÊS(HOJE());1);$E$7:$E$30;1;FALSO)));DATA(ANO(HOJE());MÊS(HOJE());1)+SE(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1);1)=1;1;SE(DIA.DA.SEMANA(DATA(ANO(HOJE());MÊS(HOJE());1);1)=7;2;));DIATRABALHO(DATA(ANO(HOJE());MÊS(HOJE());1);2;$E$7:$E$30))

      Curtir

    • Dom Luiz Filipe M. Alves disse:

      você pode usar uma formula =ANO(HOJE)) que você vai trazer o ano automaticamente e usar isso para integrar junto da formula principal.

      Curtir

      • Fernando Pratas disse:

        boa noite, por favor como faço para passar uma certa data que cai numa sexta feira para o próximo dia útil.
        tenho uma data que caiu numa sexta feira de carnaval e quero que passe para o primeiro dia útil posterior.
        obrigado

        Curtir

  9. Patricia disse:

    Salvou horas do meu trabalho… Muuito obrigada… um verdadeiro anjo

    Curtir

  10. Sandro disse:

    Amigo, você não tem idéia da ajuda que você me deu com a sua matéria.
    Muito muito muito obrigado por ter compartilhado este conhecimento.

    Abç

    Curtir

  11. Anônimo disse:

    NÃO PRECISA DISSO TUDO… É MUITO MAIS SIMPLES!!!

    =DIATRABALHO(F8+D8;0;0)+2-DIA.DA.SEMANA(DIATRABALHO(F8+D8;0;0))

    Curtir

Deixe um comentário