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:

Parte Descrição
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.

Definições

O argumento interval tem as seguintes configurações:

Definição Descrição
yyyy Ano
q Trimestre
m Mês
y Dia do ano
d Dia
w Dia da semana
ww Semana
h Hora
n Minuto
s Segundo

O argumento firstdayofweek tem as seguintes configurações:

Constante Valor Descrição
vbUseSystem 0 Use a definição NLS API.
vbSunday 1 Domingo (padrão)
vbMonday 2 Segunda-feira
vbTuesday 3 Terça-feira
vbWednesday 4 Quarta-feira
vbThursday 5 Quinta-feira
vbFriday 6 Sexta-feira
vbSaturday 7 Sábado
Constante Valor Descrição
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.
VbFirstFullWeek 3 Inicie com a primeira semana completa do ano.
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.

Antes de efetuar o download do arquivo de exemplo, convido você a socializar conosco.

Escolha uma das opções abaixo. Seguir no twitter, assinar nossa Newsletter...

Isso nos ajuda na divulgação do site e te permite ficar sempre atualizado das novidades. Fico muito grato pela sua colaboração.

Digite seu email:

Você receberá um email para ativar o cadastro, ok!