Olá caros leitores, estão gostando das dicas desta série de artigos?

A maioria das informações que utilizamos hoje em dia, necessitam de um elo que as situe e se ajustem ao que queremos. As datas, se não forem bem trabalhadas e tratadas, podem gerar uma imensa dor de cabeça para nós. Por isso, estou ajudando vocês a não passarem por esse terrível caminho sem visualizarem a LUZ no fim do túnel.

Para quem ainda não leu os artigos anteriores desta série, pode fazê-lo pelos links abaixo:

  1. Um pouco mais sobre datas – Parte 1
  2. Um pouco mais sobre datas – Parte 2
  3. Um pouco mais sobre datas – Parte 3

IV – Saber quantos dias úteis existem no mês.

Estamos quase chegando ao final destas dicas sobre extração de informações de datas. Com isso, muita coisa nós já aprendemos e a partir de agora, vai depender de nossas necessidades para adaptarmos as nossas funções ou desenvolvermos outras. Sempre lembrando que as funções podem ser dependentes entre si. Uma função já escrita anteriormente pode ter a informação que eu preciso obter em um outra rotina, de maneira que eu não precise mais escrevê-la novamente, posso apenas chamá-la dentro de minha nova função, informando os parâmetros necessários, obtendo, assim, a informação que desejo.

Será o nosso caso agora. Já temos as funções para:

  • Saber o número de dias no mês: fnUltimoDiaDoMes;
  • Saber o total de sábados no mês: TotalDeSabadosNoPeriodo;
  • Saber o total de domingos no mês: TotalDeDomingosNoPeriodo;
  • Saber o total de feriados no mês: TotalDeFeriadosNoMes;

Agora queremos saber quantos dias, em determinado mês, são úteis, ou seja, não são nem sábado, nem domingo, nem feriado. Percebeu? Molezinha né?!!

Faremos uma verificação pelos dias do mês, verificando se é feriado, ou sábado ou domingo e só incrementaremos a contagem caso não seja nenhumas dessas alternativas. Beleza! Então vamos lá.

Podemos montar a seguinte função.

Function TotalDeDiasUteisNoMes(iAno As Integer, iMes As Integer) As Integer
Dim TotalDeDias As Integer
Dim TotalDeDiasNoPeriodo As Integer
Dim iContDia As Integer
Dim dDataAnalisada As Date
Dim dDataInicial As Date
Dim dDataFinal As Date
Dim iUltimoDiaDoMes As Integer

 iUltimoDiaDoMes = fnUltimoDiaDoMes(iAno, iMes)  'Pega o ultimo dia do mes
 dDataInicial = DateSerial(iAno, iMes, 1)    'Primeiro dia do mês em formato data
 dDataFinal = DateSerial(iAno, iMes, iUltimoDiaDoMes)    'Ultimo dia em formato data

 TotalDeDias = 1 + DateDiff("d", dDataInicial, dDataFinal)
 dDataAnalisada = dDataInicial
 TotalDeDiasNoPeriodo = 0

 For iContDia = 1 To TotalDeDias
 If (VerificaSeFeriado(dDataAnalisada) = False) And (Weekday(dDataAnalisada) <> vbSunday) And (Weekday(dDataAnalisada) <> vbSaturday) Then
 TotalDeDiasNoPeriodo = TotalDeDiasNoPeriodo + 1
 End If
 dDataAnalisada = DateAdd("d", 1, dDataAnalisada)
 Next iContDia

 TotalDeDiasUteisNoMes = TotalDeDiasNoPeriodo
End Function

Para chamar a função, fazemos assim:

Msgbox TotalDeDiasUteisNoMes(2009,11)

O resultado seria 20 dias úteis, pois há 30 dias no mês, 4 sábados, 5 domingos e 2 feriados (sendo que um cai no domingo -15nov).

Grande abraço a todos.