Função para mostrar quantos dias faltam para um evento ou dia específico : Excel do Seu Jeito
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"
Retorna = DateDiff(sIntervalo, Now, ToDate)
TempoRestante = Retorna
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.
DateDiff Retorna uma Variant (Long) que especifica o número de intervalos de tempo entre duas datas especificadas.Sintaxe
A sintaxe da função DateDiff tem os seguintes argumentos nomeados:
interval Obrigatório. Expressão de seqüência que é o intervalo de tempo usado para calcular a diferença entre date1 e date2.
date1, date2 Obrigatório; Variant (Date). Duas datas que você deseja usar no cálculo.
firstdayofweek Opcional. Uma constante que especifica o primeiro dia da semana. Se não for especificada, será considerado o domingo.
firstweekofyear Opcional. Uma constante que especifica a primeira semana do ano. Se não for especificada, será considerada aquela em que ocorre o dia 1º de janeiro.
O argumento interval tem as seguintes configurações:
y Dia do ano
w Dia da semana
vbUseSystem 0 Use a definição NLS API.
VbFirstJan1 1 Inicie com a semana na qual ocorre o dia 1 de janeiro (padrão).
VbFirstFourDays 2 Inicie com a primeira semana que tem pelo menos quatro dias no ano novo.
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.
Artigo publicado em: Fórmula, Funções Personalizadas, VBA
Veja todos os posts que falam de: Excel, excel avançado, Fórmula, Funções Personalizadas, Macro, VBA
25 leitores comentaram
fabuloso esse site, tem me ajudado muito com essa dicas.
Obrigado… pretendo escrever mais.
Falta-me TEMPO…..
TEm como ampliar para horas e minutos?
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.
18 de agosto de 2011 às 10:46
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..
http://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/