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 interval tem as seguintes configuraçõ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.
Reply
exceldoseujeito Reply:
agosto 25th, 2009 at 13:20
Obrigado… pretendo escrever mais.
Falta-me TEMPO…..
Abraço
Reply
TEm como ampliar para horas e minutos?
Reply
Reinaldo Coral Reply:
outubro 17th, 2009 at 13:44
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.
Reply