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.