Um pouco mais sobre datas (Parte 2)

Olá caros leitores.
Dando continuidade a esta série de artigos sobre trabalhos com datas, hoje vamos construir uma função que nos informa quantos sábados e domingos temos em um determinado periodo de datas.
Para quem ainda não leu o artigo anterior desta série, pode fazê-lo pelo link abaixo:

  1. Um pouco mais sobre datas – Parte 1


II – Saber quantos sábados existem entre duas datas informadas.
Supondo que temos aulas de inglês todos os sábados e queremos saber quantos sábados (aulas) ainda teremos até o final do ano. Temos duas datas, inicial (hoje: 1/11/2009) e final (31/12/2009).
Podemos montar a seguinte função.

Function TotalDeSabadosNoPeriodo(dDataInicial As Date, dDataFinal As Date) As Integer
Dim TotalDeDias As Integer
Dim TotalDeDiasNoPeriodo As Integer
Dim iContDia As Integer
Dim dDataAnalisada As Date
 TotalDeDias = 1 + DateDiff("d", dDataInicial, dDataFinal)
 dDataAnalisada = dDataInicial
 TotalDeDiasNoPeriodo = 0
 For iContDia = 1 To TotalDeDias
 If Weekday(dDataAnalisada) = vbSaturday Then
 TotalDeDiasNoPeriodo = TotalDeDiasNoPeriodo + 1
 End If
 dDataAnalisada = DateAdd("d", 1, dDataAnalisada)
 Next iContDia
 TotalDeSabadosNoPeriodo = TotalDeDiasNoPeriodo
End Function

Para chamar a função, fazemos assim:
Msgbox TotalDeSabadosNoPeriodo(“1/11/2009″,”31/12/2009”)
O resultado será 8.
A função interna que nos ajuda a descobrir o dia da semana é a função Weekday. Nossa estratégia de algorítimo é fazer um loop percorrendo todas as datas e analisando quais delas são sábado e incrementando num contador. Simples né.

Detalhe: Esta função pode ser chamada diretamente na célula, ok! Substituindo as datas fixas que foram informadas no exemplo, por referências a outras células que contenham as datas inicial e final, atualizando, assim, dinâmicamente quando seus valores forem modificados.

III – Saber quantos domingos existem entre duas datas informadas.
Não há grandes diferenças para se obter esta informação com referência aos domingos. O detalhe está na propriedade retornada pela função Weekday, que agora será VbSunday.
Utilizando as mesmas datas do exeplo anterior, temos: duas datas, inicial (hoje: 1/11/2009) e final (31/12/2009).
Podemos montar a seguinte função.

Function TotalDeDomingosNoPeriodo(dDataInicial As Date, dDataFinal As Date) As Integer
Dim TotalDeDias As Integer
Dim TotalDeDiasNoPeriodo As Integer
Dim iContDia As Integer
Dim dDataAnalisada As Date
 TotalDeDias = 1 + DateDiff("d", dDataInicial, dDataFinal)
 dDataAnalisada = dDataInicial
 TotalDeDiasNoPeriodo = 0
 For iContDia = 1 To TotalDeDias
 If Weekday(dDataAnalisada) = vbSunday Then
 TotalDeDiasNoPeriodo = TotalDeDiasNoPeriodo + 1
 End If
 dDataAnalisada = DateAdd("d", 1, dDataAnalisada)
 Next iContDia
 TotalDeDomingosNoPeriodo = TotalDeDiasNoPeriodo
End Function

Para chamar a função, fazemos assim:
Msgbox TotalDeDomingosNoPeriodo(“1/11/2009″,”31/12/2009”)
O resultado será 9.
Até a próxima, amigos.

Leave a Comment