Nesta série de artigos vou explicar um pouco como obter informações importantes e específicas sobre as datas. O meu objetivo será desenvolver funções que retornem resultados que são necessários em diversas situações para cálculos em nossas planilhas. Um exemplo disso é quando precisamos saber qual o último dia de um mês. Para qualquer mês, já sabemos que podem ter 30 ou 31 dias, exceto fevereiro, que pode variar entre 28 ou 29 dias, conforme o ano. Como podemos definir isso? Outro caso é para sabermos quantos dias úteis existem em determinado mês. Para isso, precisamos excluir os sábados, domingos e feriados. E vai a pergunta, como identificar estes dias (finais de semanas ou feriados)?

São assuntos como esses que abordaremos nestes artigos. Garanto a você, caro leitor, que estas dicas te ajudarão muito, pois são muito usuais.

I – Identificar quantos dias tem cada mês (ênfase em descobrir o mês de fevereiro).

Bem, para começar vamos escrever os meses e seu total de dias.

Mês Total de Dias
Janeiro 31
Fevereiro 28 ou 29
Março 31
Abril 30
Maio 31
Junho 30
Julho 31
Agosto 31
Setembro 30
Outubro 31
Novembro 30
Dezembro 31

Observamos, então, que o único mês que precisamos nos preocupar é o mês de fevereiro, pois, apenas este tem o total de dias variável. Se não fosse por este mês, poderíamos apenas, fazer alguma instrução select, ou posicioná-los em um array, ou ainda, a nível de fórmula, montarmos alguns SE.

Como nosso intuito neste site é aprendermos mais profundamente as funcionalidade do Excel, podemos incrementar esta função de maneira mais profissional, até porque, desta maneira, ela poderá ser adaptada e utilizada por outras funções internamente.

Esta função é simples, mas precisa de atenção para perceber os detalhes. Vamos construí-la:

Vá ao construtor avançado de Macros (ALT+F11) e adicione um Módulo ao projeto.

Private Function fnUltimoDiaDoMes(iAno As Integer, iMes As Integer, Optional iDia As Integer = 1) As Integer
Dim arrayMesesUltimoDia As Variant

 arrayMesesUltimoDia = Array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

 If iMes = 2 Then
 If IsDate("29/2/" & iAno) Then
 fnUltimoDiaDoMes = 29
 Else
 fnUltimoDiaDoMes = 28
 End If
 Else
 fnUltimoDiaDoMes = arrayMesesUltimoDia(iMes)
 End If

End Function

Você pode chamar a função assim, supondo que queira informação do mês 2/2009, por exemplo:

Msgbox fnUltimoDiaDoMes(2009,2)               // O resultado será 28.

Outros datas:

Msgbox fnUltimoDiaDoMes(2012,2)               // O resultado será 29.

Msgbox fnUltimoDiaDoMes(2009,4)               // O resultado será 30.

Msgbox fnUltimoDiaDoMes(2010,12)               // O resultado será 31.

Msgbox fnUltimoDiaDoMes(2009,12,25)               // O resultado será 31.

Explicando. Nesta função deve ser informado o ano, o mês, e, opcionalmente, a data, caso deseje. Enfim, bem simples e funcional.

No próximo artigo, vamos incrementá-la adicionando outras funções que dependerão dela.

Um abraço e espero você.