Contar apenas dias úteis em uma consulta
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Usuário Leandro:
Bom dia,
preciso contar apenas os dias úteis de uma tabela, no campo "DATA R". Por exemplo, um material com data do dia 01/09/2016, deveria estar com 2 dias.
Utilizei
SeImed([Data R]=Data();0;Data()-[Data R])
Mas esta fórmula calcula todos os dias, retornando 4 dias.
Como posso fazer para contar apenas os dias úteis?
Suporte:
Leandro, copie a função abaixo para um módulo global:
Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
j = j + 1
End If
dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function
Na consulta, crie o campo virtual DiasUteis:
DiasUteis: fncDiasUteis([data R];data())
Caso tenha que levar em consideração os feriados, altere a função para:
Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
If Not fncFeriado(dataAnalisada) Then
j = j + 1
End If
End If
dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function
A função fncFeriado(), você monta conforme este meu artigo.
Usuário Leandro:
Avelino,
a consulta de Dias Úteis esta funcionando perfeitamente.
A questão dos feriados é um pouco mais complicada, pois o que preciso considerar, são os dias Não Úteis, que envolvem além dos feriados, dias de greve, por exemplo, e isso é impossível prever.
Por isso, pensei em uma tabela ou formulário, onde eu digitaria manualmente os dias Não Úteis e a consulta de Dias Úteis, excluiria os dias digitados.
Isso é possível ?
Suporte:
Leandro, para consultar a tabela de dias Não Úteis, basta utilizar a função Dcount(). Algo assim:
Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
If Dcount("*","tblDiasNãoUteis","DataNãoUtil = #" & Format(dataAnalisada,"mm/dd/yyyy") & "#") = 0 Then
j = j + 1
End If
End If
dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function
Usuário Leandro:
Avelino,
funcionando perfeitamente!
2 comentário(s) Rodrigo Gomes 27/04/2021 12:00:40 Olá, Boa tarde! A exemplo do que foi explicado na dúvida do Leandro, como eu poderia fazer o inverso? Por exemplo, se eu tiver em uma tabela um campo contendo a data inicial, em outro campo, o prazo para entrega de uma determinada atividade, em dias, gostaria de me retornasse uma data final já considerando esse prazo, descontado fins de semana e feriado. Como poderia resolver isso? Gustavo 25/04/2020 06:52:03 Ola, como faço pra utilizar a funcao "Dcontar" para contar registros que seja maior que 0 sem utilizar o VB. |