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.

tabela-diferença-entre-datas-meses-excel

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…

    1. Function tempo_meses(num1)
    2. num1 = DateDiff(“m”, num1, Now)
    3. 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.

Select Case num1

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




.

Sobre o Autor

Comentários

  1. djalma rodrigues

    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

    1. Douglas Godoy Resposta do Autor

      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

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *