Olá.
Hoje iniciarei uma série de artigos que ensinarão como trabalhar mais profundamente com datas no Excel. Abordarei sobre o uso de datas para a exibição adequada as mais diversas situações existentes em nossos projetos. Muitas aplicações não são possíveis de ser realizadas com as funções nativas do Excel, outras ficariam muito extensas e repetitivas, transportando-nos, então, às soluções oferecidas pelas macros do VBA.
No artigo de hoje, mostrarei funções personalizadas para uma agenda de eventos. Esta função figurará na caixa de fórmulas como uma função definida pelo usuário.
Imagine que tenhamos uma série de eventos cadastrados e desejamos saber quantos dias restam para o acontecimento de tal evento. Poderíamos pegar a célula com a data do evento (suponha que seja A1) e subtrair pela data atual (HOJE()), o que ficaria mais ou menos assim:
=A1-HOJE()
Ocorre que o resultado seria exibido em formato de data, o que não seria interessante para nós. Teríamos, então, que formatar a célula com o resultado para formato numérico sem casas decimais. Um pequeno trabalho adicional para a exibição de um simples resultado. No caso de querermos mostrar o tempo restante em meses adicionaríamos uma divisão do resultado por 30, assim:
=(A1-HOJE())/30
Simples, mas, reportaria as mesmas correções para uma correta exibição. O mesmo ocorreria para exibir o tempo restante em anos:
=(A1-HOJE())/365
Em uma planilha de pequeno porte ainda vai, mas pense numa planilha com milhares de dados ou dados não dispostos em seqüência. Você seria obrigado a digitar e formatar célula por célula. Pense se todo esse trabalho pudesse ser substituído por algo como:
=TempoRestante(A1;1)
Sem precisar formatar, calcular e mais nada. Maravilhoso não é?!! Então! Isso é possível sim. Podemos Criar uma função personalizada no VBA e chamá-la diretamente na célula onde desejamos exibir o resultado.
Faça assim. Abra o VBA Project (Alt+F11) e insira um Módulo. Digite o seguinte código nele:
Public Function TempoRestante(ByVal ToDate As Date, Optional iIntervalo As Integer) As Long
Dim Retorna As Long
Dim sIntervalo As String
If iIntervalo = 0 Then iIntervalo = 1
Select Case iIntervalo
Case 1 'Diferenca em dias
sIntervalo = "d"
Case 2 'Diferenca em meses
sIntervalo = "m"
Case 3 'Diferenca em anos
sIntervalo = "yyyy"
Case Else
sIntervalo = "d"
End Select
Retorna = DateDiff(sIntervalo, Now, ToDate)
TempoRestante = Retorna
End Function
Nesta function calculamos a diferença de data através da função Datediff, que pode obter o resultado para dias, meses ou anos. Para exibir o tempo restante, basta informar a data do evento no primeiro parâmetro. E para retornar o resultado em dias, informe no segundo parâmetro, o valor 1, para resultados por mês, informe 2 e por ano, 3.
Pronto. Mais nada. Sua fórmula personalizada que calcula o Tempo Restante já está ativa e funcionando perfeitamente. Adicionalmente, você pode implementá-la conforme suas necessidades. No caso deste exemplo, criei adaptei a fórmula com uma combinação das funções “SE” e “SINAL” para exibir “Evento já realizado” caso o resultado da fórmula fosse negativo (ou seja, dia anterior a data atual).
Agora é só dar asas a sua imaginação.
Um abraço.
Termos aprendidos neste artigo:
DateDiff | Retorna uma Variant (Long) que especifica o número de intervalos de tempo entre duas datas especificadas.Sintaxe DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) A sintaxe da função DateDiff tem os seguintes argumentos nomeados:
Definições
O argumento firstdayofweek tem as seguintes configurações:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SINAL | Determina o sinal de um número. Fornece 1 se núm for positivo, zero (0) se núm for 0, e -1 se núm for negativo.Sintaxe SINAL(núm) Núm é qualquer número real. |
fabuloso esse site, tem me ajudado muito com essa dicas.
Obrigado… pretendo escrever mais.
Falta-me TEMPO…..
Abraço
TEm como ampliar para horas e minutos?
Tem sim.
Você deverá informar a data inicial juntamente com a hora inicial.
No cálculo, você deverá incluir o datediff com o identificador de intervalo em minutos “n” e depois fazer uma divisão por 24horas para obter o resto, que serão os minutos adicionais as horas.
O caminho é este… desculpe não escrever a fórmula completa aqui, estou um pouco sem tempo. Depois posto a fórmula.
Ok.
Olá,
Primeiramente parabens pelo site.
Eu estou precisando de algo similar para uma planilha de controle de contratos.
Os contratos possuem a data de início e fim, então, gostaria de uma macro que verificasse o dia de vencimento do contrato e quando faltasse 30 dias para o fim, enviasse um email de alerta..
É possível?
Obrigado.
Leia isso aqui:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Abç
Parabéns por esta dica, este site é o melhor sobre dicas e aprendizagem sobre excell .
Excelente artigo. Me ajudou muito.
Meus parabéns! ^^
Muito bom, Excelente! Me ajudou D+, seu site está de parabéns, adicionei logo aos meus favoritos!
Valeu Marcílio!