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ê.
Muito boa a materia, e gostei muito do seu site.
tenho uma sugestão para o tema de datas isso pode ajudar muita gente.
Abraços,
Bruno Gonçalves
Sub UltimoDia()
Dim DIA
Dim Data
Data = Now()
DIA = DatePart(“d”, DateAdd(“m”, 1, DateAdd(“d”, -Day(Data), Data)))
MSGBOX “Último dia do mês – ” & DIA
End Sub
@Bruno, obrigado.
Esta rotina “UltimoDia” que você citou, infelizmente, ocorre num erro de lógica. Vou explicar.
Suponha que hj seja 5/12/2010.
A instrução do seria:
Subtrair 5 dias desta data. Resultado: 30/11/2010
Adicionar 1 mês a este resultado. Novo Resultado: 30/12/2010
Pegar a parte da data referente ao dia deste resultado. Resultado final: 30
Ou seja, ela retorna como dia 30 sendo o último dia do mês de Dezembro, quando deveria retornar dia 31.
Neste artigo, eu disponibilizei uma função para retornar o último dia de qualquer mês, em qualquer ano, inclusive, para o mês de fevereiro, que tem a variação entre 28 ou 29 dias.
Estão função, eu expliquei como retorno de resultado dentro de uma célula, e, informando os parametros, mas, também, pode retornar numa caixa de mensagem, e puxando a data atual como referência, como você sugeriu.
Exemplo:
MsgBox “Último dia do mês – ” & fnUltimoDiaDoMes(Year(Now()), Month(Now()))
Espero ter ajudado.
Abç
Olá Reinaldo Coral,
Legal o seu site.
Gostaria de saber como entrar em contato
contigo para te mostrar uma planilha que
desenvolvi e tirar umas dúvidas.
De repente até te contratar para fazer
um pequeno projeto.
Abraços,.
Fábio Queiroz
Fábio,
Mande para orcamento@exceldoseujeito.com.br
Não posso dar certeza de pegar o projeto por questão de agenda mesmo.
Mas, de repente, posso te dar uma luz no fim do túnel para você seguir o projeto.
Abç.