Olá amigos,
Hoje vou postar uma Function (Função = Fórmula) que pode facilitar muito a vida de quem trabalha com informações de datas, muitas vezes precisamos saber a idade ou tempo decorrido a partir de uma data inicial até a data atual, se fossemos realizar esta tarefa manualmente teríamos muito trabalho e certamente um grande gasto de tempo.
Vou postar um exemplo que mostra quanto tempo determinados clientes estão em atraso, classificando os mesmos em categorias.
Porém ressalto que cabe a você adaptar o exemplo a sua realidade de atividade ou negócio.
Function tempo_meses(num1)
num1 = DateDiff(“m”, num1, Now)
Select Case num1
Case 1 To 3
tempo_meses = “1 | 01 a 03 meses”
Case 4 To 6
tempo_meses = “2 | 04 a 06 meses”
Case 7 To 11
tempo_meses = “3 | 07 a 11 meses”
Case 12 To 18
tempo_meses = “4 | 12 a 18 meses”
Case 19 To 24
tempo_meses = “5 | 19 a 24 meses”
Case Else
tempo_meses = “6 | Mais de 2 anos”
End Select
End Function
Explicando o código por etapas…
- Function tempo_meses(num1)
- num1 = DateDiff(“m”, num1, Now)
- Select Case num1
1 Etapa…
Nesta etapa capturamos o valor da data na célula, pois como se trara de uma fórmula armazenaremos o valor na variável num1, o nome da função ou fórmula será tempo_meses.
2 Etapa…
Pegamos a varíavel num1 e utilizamos o valor da mesma na dunção DateDiff (Onde o próprio nome diz = Diferença entre datas)
Neste código utilizamos a função DATEDIF(unidade, data_inicial,data_final).
DateDiff(“M”, num1, Now) ONDE:
“M” = Trará o retorno do número de meses em quantidade do período.
num1 = É a data inicial do período.
now = É a data atual do sistema, no caso hoje.
DATEDIF(unidade, data_inicial,data_final).
Esta função calcula o número de dias, meses ou anos entre duas datas.
DATA_INICIAL: é uma data que representa a primeira data, ou data de partida, início do período.
DATA_FINAL: é uma data que representa a última data, ou data de término, fim do período.
UNIDADE: é o tipo de informação que você deseja que seja retornado a função,vide tabela abaixo:
Unidade | Retorno |
“Y” | O número de anos completos no período. |
“M” | O número de meses completos no período. |
“D” | O número de dias no período. |
“MD” | A diferença entre os dias de DATA_INICIAL e DATA_FINAL. Os meses e anos das datas são ignorados. |
“YM” | A diferença entre os meses de DATA_INICIAL e DATA_FINAL. Os dias e anos das datas são ignorados |
“YD” | A diferença entre os dias de DATA_INICIAL e DATA_FINAL. Os anos das datas são ignorados. |
As datas são armazenadas como números de série sequenciais para que eles possam ser utilizados em cálculos . Por padrão, 31 dez 1899 é o número de série 1 , e 1 de Janeiro de 2008, é o número de série 39448 , pois é 39,448 dias após 1 de Janeiro de 1900.
A função DATEDIF é útil em fórmulas em que você precisa para calcular a idade ou tempo entre datas.
3 Etapa…
Nesta etapa já temos a data no código e a quantidade de meses armazenada na variável num1, e aplicamos a estrutura condicional SELECT CASE para dar o retorno com a quantidade de meses com categorias…
Caso o num1 seja o retorno de meses entre 1 até 3 exibirá a mensagem “1 | 01 a 03 meses”, e assim por diante em cada categoria de meses, caso não tenham mais condições a serem mapeadas a expressão é finalizada com o CASE ELSE mapeando o último cenário, e a estrutura é finalizada com o END SELECT.
Case 1 To 3
tempo_meses = “1 | 01 a 03 meses”
Case Else
tempo_meses = “6 | Mais de 2 anos”
End Select
IMPORTANTE: A função se chama tempo_meses, e retorno dentro da estrutura condicional dele ser o mesmo para que assim a função/fórmula funcione adequadamente no Microsoft Excel.
Clique aqui e faça Download do CÓDIGO VBA.
Clique aqui e faça Download do EXCEL COM EXEMPLO.
Com este arquivo espero que sua dúvidas sejam sanadas e que você tenha pelo menos um norte para iniciar seus trabalhos no que refere-se a trabalhar com diferença entre datas.
Agradeço pela leitura e fico no aguardo de seus comentários e sugestões.
Um abraço. DG
Douglas, bom dia.
Parabéns pela excelente iniciativa. Lhe enviei convite no Linked In, pois gostaria de lhe ter como conexão.
Ainda não tentei executar o código, mas neste caso não seria mais simples o uso da função de diferença de datas, excluindo os feriados, que poderiam estar em uma tabela atualizável ?
O mesmo para a classificação de “aging” que eventualmente pode demandar um agrupamento flexível, conforme os desejos da gestão.
Forte abraço,
Djalma Rodrigues
Bom dia Djalma.
Primeiramente muito obrigado pela visita e também pelo comentário, será muito bom tê-lo entre meus contatos no LinkedIn, se precisar de algo fico a disposição.
Sobre seu comentário digo que depende do ponto de vista, e até mesmo da necessidade do usuário para a utilização da função de diferença de datas.
Caso o usuário precise apenas do retorno da diferença entre datas em quantidade é muito viável é até mais rápido o uso da função de datas, porém o que torna o trabalho moroso e até chato é a classificação do “Aging”, pois fazer a mesma via fórmula para algumas pessoas é uma tarefa um pouco difícil.
Fazer via código ao meu ver faz com que haja a integridade do “Aging” e é até mais rápido, pois basta colar o código no módulo na planilha e verificar se o “Aging” proposto atende.
A função é boa para quem trabalha com o mesmo “Aging” sempre, para casos em que ele muda frequentemente podemos utilizar a tabela auxiliarcomo citou.
Novamente lhe agradeço pelo comentário e lhe convido a sempre que quiser retornar.
Um Abraço.
DG
Parabéns pelo artigo Douglas! Simples e direto.
Ola Alessandro,
Muito obrigado pela visita e pelo comentário.
Sempre que precisar fico a disposição.
Um abraço.