Aprenda 2 Formas de como Calcular Dias úteis no Access

Prezado leitor(a)! Neste tutorial de hoje Aprenda 2 Formas de como Calcular Dias úteis no Access, vamos entender 2 técnicas para fazer este cálculo dentro do Access VBA.

Sem dúvida nenhuma, este procedimento é muito comum para quem trabalha com cronograma, prazos e planejamento de ações e atividades.

A ideia é entender o algoritmo capaz de resolver esta solução, portanto não vamos levar em consideração os feriados que porventura surgirem neste intervalo. Vamos considerar como dias não úteis apenas os Sábados e Domingos.

A seguir veremos 2 formas para Calcular Dias úteis no Access.

Como Calcular Dias úteis no Access: A partir de uma Quantidade de Dias

Suponhamos que você tenha dado entrada em uma documentação em algum órgão público de sua cidade, e o agente responsável pela sua documentação confirme que esta documentação estará disponível para retirada 20 dias úteis após a sua entrada. Como poderemos criar um algoritmo para resolver esta questão?

Sub DiasUteis_1()

    Dim DataInicial As Date, DataFinal As Date
    Dim qDiasUteis As Integer, dias As Integer
    Dim diaSemana As Integer
    
    DataInicial = InputBox("Entre com a Data de Solicitação do documento!", "Data Inicial")
    qDiasUteis = InputBox("Informe a quantidade de dias úteis para disponibilidade!", "Dias Úteis")
    
    dias = 0
    DataFinal = DataInicial
    While dias < qDiasUteis
        DataFinal = DataFinal + 1
        diaSemana = Weekday(DataFinal)
        If diaSemana <> 1 And diaSemana <> 7 Then
           dias = dias + 1
        End If
    Wend
    
    Debug.Print "O seu documento estará disponível a partir de: " & DataFinal
    
End Sub

Neste código são solicitados 2 informações do usuário. A “DataInicial”, ou seja, a data em que foi dado a entrada na documentação e a quantidade de dias úteis que vai levar para a documentação ficar pronta.

Com base nestas informações eu declaro a variável “dias” que será o contador de dias úteis dentro do meu algoritmo.

Neste contexto, eu igualo a “DataFinal” a datainicial para que dentro do ciclo eu saiba que aquele dia que está sendo referenciado é um dia da semana. Aqui usamos o auxílio da função WeekDay() ou DiaSem() que vai trazer o dia da semana de uma data.

Caso este dia da semana seja diferente de um sábado e de um domingo, aquele dia específico serás um dia útil, incrementando o contador “dias”.

O algoritmo faz este ciclo enquanto a quantidade de dias, do contador “dias” for menor que a quantidade de dias úteis informado pelo usuário.

accessfacil.com

Ao final do processo, o algoritmo exibe na Janela de Inspeção Imediata a “DataFinal”, ou seja, a partir de quando a documentação estará pronta para ser entregue.

Calcular Dias úteis no Access: Cálculo entre 2 Datas, descontando os feriados

Suponhamos agora que você tenha uma obra para ser executada dentro de um determinado intervalo de datas e que sua equipe de trabalho só pode trabalhar nos dias úteis desse intervalo. Quantos dias sua equipe terá disponibilidade para trabalhar?

Sub DiasUteis_2()

    Dim DataInicial As Date, DataFinal As Date
    Dim di As Date, dias As Integer
    Dim diaSemana As Integer, intFeriados As Integer
    
    DataInicial = InputBox("Entre com a Data Inicial!", "Data Inicial")
    DataFinal = InputBox("Entre com a Data Final!", "Data Final")
    
    dias = 0
    di = DataInicial
    While di <= DataFinal
        di = di + 1
        diaSemana = Weekday(di)
        If diaSemana <> 1 And diaSemana <> 7 Then
           dias = dias + 1
        End If
    Wend
    
    intFeriados = DCount("[Datas]", "tblFeriados", "[Datas] Between #" & DataInicial & _
        "# And #" & DataFinal & "#")
    
    Debug.Print "Há " & CInt(dias - intFeriados) & " dias entre " & _
        DataInicial & "-" & DataFinal
    
End Sub

Neste novo código são solicitados 2 informações do usuário. A “DataInicial” e a “DataFinal” do intervalo.

É de suma importância ter uma tabela com as datas dos feriados do período para que o cálculo seja realizado ccom êxito

Com base nestas informações eu declaro a variável “dias” que será o contador de dias úteis dentro do meu algoritmo.

Neste contexto, eu crio uma outra variável “di” que vai receber a minha “DataInicial” para que dentro do ciclo eu saiba que aquele dia que está sendo referenciado é um dia da semana. Aqui usamos mais uma vez o auxílio da função WeekDay() ou DiaSem() que vai trazer o dia da semana de uma data.

Caso este dia da semana seja diferente de um sábado e de um domingo, aquele dia específico serás um dia útil, incrementando o contador “dias”.

O algoritmo faz este ciclo enquanto a variável “di” for menor que a “DataFinal” informada pelo usuário.

Ao final do processo, o algoritmo exibe na Janela de Inspeção Imediata a quantidade de dias úteis que existem entre estas a “DataInicial” e a “DataFinal”, descontado da quantidade de feriados que existirem neste período.

Gostou dessas técnicas?

Deixe seu comentário sobre estas funções.

2 comentários


  1. Grande Aldir Oliveira, saudações.
    Gostei muito da sua aula e estava em busca de algo simples para implementar no meu BD.
    O problema é que bato cabeça de como ter o resultado imediato da sua programação espetacular na janela de verificação do VBA, mas inserida em controle de um formulário. É possível?
    Por exemplo, coloco a data inicial, a quantidade de dias e no campo data final, exibe a data encontrada.
    Parabéns, agradeço

    Responder

    1. Opa Paulo! Este cálculo é possível até sem programação. Você pode criar uma fórmula no próprio TextBox, Suponhamos que a Data Inicial esteja em um TextBox chamado txtDataInicial e vc deseje saber esta data final com 30 futuros. Vá até a Propriedade Fonte de Controle do txtDataFinal e coloque a seguinte fórmula: =[txtDatainicial]+30. Toda vez que for digitado uma Data Inicial a Data Final aparecerá com mais 30 dias
      Obs: Não esqueça de formatar ambos os TextBox como Data Abreviada.

      Responder

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *