Uma outra possibilidade, uma UDF (fonte: http://www.hardware.com.br/comunidade/idade-calcular/283967/).
' ---------------------------------------------------------
' Função: AnoMesDia
' Obs: A recepção de Data1 e Data2 como variáveis Date
' tem a vantagem de permitir a aceitação de datas
' em qualquer formato reconhecido pelo Excel.
' A desvantagem é qie, por exemplo, se Data1=26,
' a função aceita: 26 é o número serial de
' 26/01/1900, e vai fazer o cálculo nessa base.
' Uma alternativa é trocar Data1 e Data2 para
' variáveis do tipo String e incluir na função
' testes de data.
' ---------------------------------------------------------
Function AnoMesDia(Data1 As Date, Data2 As Date) As String
On Error GoTo AnoMesDia_Err
Dim sTmp As String ' valor tmp da função
Dim nDMA As Long ' n Anos, Meses, Dias
Dim NewDate As Date ' data auxiliar de cálculo
Dim sSngPlural As String ' string (mês, meses), (ano, anos)
' Faz o swap de datas: ordena/ evita negativos
If Data1 > Data2 Then
NewDate = Data2
Data2 = Data1
Data1 = NewDate
End If
' Bloco Ano
' Calcula número inteiro de anos
nDMA = DateDiff("yyyy", Data1, Data2)
' Se Data1+nDMA>Data2, subtrai 1
If DateAdd("yyyy", nDMA, Data1) > Data2 Then
nDMA = nDMA - 1
End If
sSngPlural = " ano, "
If nDMA > 1 Then sSngPlural = " anos, "
sTmp = nDMA & sSngPlural
' Bloco Mês
' Nova data de referência
NewDate = DateAdd("yyyy", nDMA, Data1)
nDMA = DateDiff("m", NewDate, Data2)
If DateAdd("m", nDMA, NewDate) > Data2 Then
nDMA = nDMA - 1
End If
sSngPlural = " mês e "
If nDMA > 1 Then sSngPlural = " meses e "
sTmp = sTmp & nDMA & sSngPlural
' Bloco Dia
NewDate = DateAdd("m", nDMA, NewDate)
nDMA = DateDiff("d", NewDate, Data2)
sSngPlural = " dia"
If nDMA > 1 Then sSngPlural = " dias"
sTmp = sTmp & nDMA & sSngPlural
' Valor final da função
AnoMesDia = sTmp
AnoMesDia_Fim:
Exit Function
AnoMesDia_Err:
MsgBox Err.Description
Resume AnoMesDia_Fim
End Function
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 04/03/2017 7:12 am