Notifications
Clear all

Calcular idade em linhas diferentes

10 Posts
3 Usuários
0 Reactions
2,369 Visualizações
(@yelrah)
Posts: 0
New Member
Topic starter
 

Olá, a todos.

1 - Preciso de uma fórmula que me retorne as idades de cada pessoa tendo como base o seu ano de nascimento em relação a data em que jogaram determinado jogo.
2 - A informação das datas de nascimento estão em linhas diferentes pois preciso que tal fórmula busque a data de nascimento daquela pessoa em um banco de dados de mais de 30.000 linhas.
3 - Existem pessoas que nasceram antes de 1900, data limite para cálculos em Excel. Portanto gostaria que houvesse alguma condição que me permitisse o cálculo dessa idade sem que me fosse retornado um erro.
4 - A fórmula precisa considerar anos bissextos.
5 - Preciso de duas formas diferentes para o retorno da informação. Por extenso, exemplo: 21 anos, 3 meses e 20 dias. Por colunas, exemplo: |21|03|20|. Sendo uma coluna para anos, outra para meses e outra para os dias.

 
Postado : 03/03/2017 6:39 pm
(@deciog)
Posts: 0
New Member
 

yelrah, Bom Dia.

Confere se é desta forma que desejas

Decio

 
Postado : 04/03/2017 4:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

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
 
Postado : 04/03/2017 7:12 am
(@yelrah)
Posts: 0
New Member
Topic starter
 

Olá, Décio.
Obrigado por ceder um pouco do seu tempo para me ajudar.
É quase isso, eu só preciso de duas pequenas modificações. Gostaria que os cálculos das fórmulas se originassem nas colunas anos, meses e dias. Reservando assim a coluna de "idade por extenso" apenas para uma fórmula mais simples como um CONCATENAR por exemplo.
A outra modificação à ser feita é que nas pessoas que nasceram antes de 1900 ficou em branco na contagem das idades. São elas: "Mofo KP" e "Felipe".

Seria possível essas correções?

Novamente obrigado.

 
Postado : 04/03/2017 10:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em adendo,
a função Datadif; e outras funções data do Excel; calculam somente datas a partir de 1900, veja que para Otavo (1900) o calculo foi efetuado, ja Felipe (1898) e Mofo KP (1870) não foram; pois e considerado uma string/texto e não uma data valida
Para calculos anteriores a 1900 a microsoft recomenda uso da UDF (macro):
Vide https://support.microsoft.com/pt-br/help/245104/how-to-calculate-ages-before-1-1-1900-in-excel

 
Postado : 04/03/2017 5:39 pm
(@yelrah)
Posts: 0
New Member
Topic starter
 

Reinaldo, já vi utilizarem para casos parecidos algo assim: =DATADIF(VALOR(SUBSTITUIR($AW48;"/18";"/19"));S48+36525

Porém eu não consigo entender a fórmula e não consegui aplicá-la na minha situação.
Eis o motivo de meu pedido de ajuda.

Abs

 
Postado : 04/03/2017 5:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sem saber o conteudo de AW48 e de S48 fica dificil,
mas substituir(AW48;"/18";"/19") supondo que aw48 seja "02/06/1898" ficará "02/06/1998" --> "transforma" uma data 1800 em 1900, bem interessante o recurso
Aparentemente acrescenta 100 anos nas duas datas e assim o datadif efetua os cálculos, não tinha visto/pensado/imaginado;mas parece funcional
Experimente em:
I3

=SEERRO(SE(ÉERRO(LOCALIZAR("/18";PROCV(G3;$P$3:$Q$37;2;0);1));DATADIF(PROCV(G3;$P$3:$Q$37;2;0);F3;"Y");DATADIF(SUBSTITUIR(PROCV(G3;$P$3:$Q$37;2;0);"/18";"/19");F3+36525;"Y"));"")

J3

=SEERRO(SE(ÉERRO(LOCALIZAR("/18";PROCV(G3;$P$3:$Q$37;2;0);1));DATADIF(PROCV(G3;$P$3:$Q$37;2;0);F3;"Ym");DATADIF(SUBSTITUIR(PROCV(G3;$P$3:$Q$37;2;0);"/18";"/19");F3+36525;"Ym"));"")

K3

=SEERRO(SE(ÉERRO(LOCALIZAR("/18";PROCV(G3;$P$3:$Q$37;2;0);1));DATADIF(PROCV(G3;$P$3:$Q$37;2;0);F3;"md");DATADIF(SUBSTITUIR(PROCV(G3;$P$3:$Q$37;2;0);"/18";"/19");F3+36525;"md"));"")
 
Postado : 04/03/2017 7:19 pm
(@yelrah)
Posts: 0
New Member
Topic starter
 

Reinaldo, fiz como vc mandou. Mas ficou em branco nas datas das pessoas que nasceram antes de 1900.
Estou enviando em anexo com as fórmulas que vc escreveu.
Abs.

 
Postado : 04/03/2017 8:19 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Dependendo da configuração do excel, o calculo não e feito; por isso o uso da função valor.

 
Postado : 05/03/2017 5:35 am
(@yelrah)
Posts: 0
New Member
Topic starter
 

Reinaldo, PERFEITO!!!!

Era exatamente isso!

Muito obrigado pela ajuda.

Vou dar o "OK" aqui e no outro fórum.

Abraços!

 
Postado : 05/03/2017 9:59 am