Macro para calcular la edad

Para

Elsa Matilde

Hace poco consulte como calcular la edad de una persona pero la fórmula que utilice no me da la edad exacta (a veces me da más o menos)

Ahora tengo esta fórmula, algo larga pero al parecer funciona, pero no se como convertila en código macro.

=SI(C5="","",SI(DIA(E5)>=DIA(C5),SI(MES(E5)>=MES(C5),AÑO(E5)-AÑO(C5),AÑO(E5)-AÑO(C5)-1),SI(MES(E5)>MES(C5),AÑO(E5)-AÑO(C5),AÑO(E5)-AÑO(C5)-1))&" años")

La fecha de nacimiento esta el textbox3 y la otra fecha en el textbox5

Este es el código que he estado usando y que me da un resultado equivocado

If TextBox3 <> "" And IsDate(TextBox3) Then
Cells(Fila, "C") = CDate(TextBox3)
End If

If TextBox5 <> "" And IsDate(TextBox5) Then
Cells(Fila, "E") = CDate(TextBox5)
End If

If TextBox5 <> "" And TextBox3 <> "" And IsDate(TextBox5) And IsDate(TextBox3) Then
Cells(Fila, "D") = Round(Int(CDate(TextBox5) - CDate(TextBox3)) / 365.25) - 1 & " años"
End If

1 respuesta

Respuesta
1

Si ya pasás las fechas a tus celdas entonces la mejor función es SIFECHA:

Reemplazá las instrucciones que dejaste en negrita por estas otras:

If TextBox5 <> "" And TextBox3 <> "" And IsDate(TextBox5) And IsDate(TextBox3) Then
Cells(Fila, "D").FormulaR1C1 = "=DATEDIF(RC[-1],RC[1],""y"")"
Cells(Fila, "D") = Cells(Fila, "D") & " años."
Application.CutCopyMode = False
End If

Sdos!

gracias

funciona mucho mejor

saludos

Perdón por la molestia

Estoy adaptando la fórmula o otra parte y funciona pero no logro que me agregue " años" al resultado

En negrita

If TextBox5 <> "" And TextBox3 <> "" And IsDate(TextBox5) And IsDate(TextBox3) Then
ActiveCell.Offset(0, 3).FormulaR1C1 = "=DATEDIF(RC[-1],RC[1],""y"")"
ActiveCell.Offset(0, 3) = Cells(0, 3) & " años."
Application.CutCopyMode = False
End If

Saludos

Porque tu fórmula esta en Activecell. Offset(0,3) y allí tenes que agregar el resto. No en Cells(0,3)

Sdos!

intente esto pero no resulta

ActiveCell.Offset(0, 3).FormulaR1C1 = "=DATEDIF(RC[-1],RC[1],""y"")" & " años"

Probé esto también y nada

If TextBox5 <> "" And TextBox3 <> "" And IsDate(TextBox5) And IsDate(TextBox3) Then
ActiveCell.Offset(0, 3).FormulaR1C1 = "=DATEDIF(RC[-1],RC[1],""y"")"
ActiveCell.Offset(0, 3) = ActiveCell.Offset(0, 3) & " años"
Application.CutCopyMode = False
End If

La fórmula hace mención a las col donde colocaste el resto de los datos. Según tu código en C y en E las fechas y en D la fórmula.

Entonces cuando la fórmula dice: DATEDIF(RC[-1],RC[1]

Dice que es C-1, es decir 1 col a la izquierda y C1 o sea 1 col a derecha de la celda donde estará la fórmula.

¿No mencionas si también cambiaste de lugar las fechas ni queda claro en qué celda estás colocando la fórmula... cuál es tu celda activa?

Sdos!

La fila y columna están bien (0,3), y la fórmula funciona bien

El caso es que después del resultado de la fórmula (ejemplo: 23)

No agrega la palabra años, el resultado se queda en 23,

Cuando el resultado debería ser 23 años

La palabra años es la que no aparece.

Todo lo demás esta bien

Esta imagen la capturé luego de ejecutar el siguiente código asumiendo que la celda activa esta en col A. Coloqué un valor 2 para la variable 'Fila' así pude utilizar las instrucciones anteriores.

Private Sub CommandButton1_Click()
FILA = 2
Range("A2").Select
If TextBox3 <> "" And IsDate(TextBox3) Then
Cells(FILA, "C") = CDate(TextBox3)
End If
If TextBox5 <> "" And IsDate(TextBox5) Then
Cells(FILA, "E") = CDate(TextBox5)
End If
If TextBox5 <> "" And TextBox3 <> "" And IsDate(TextBox5) And IsDate(TextBox3) Then
ActiveCell.Offset(0, 3).FormulaR1C1 = "=DATEDIF(RC[-1],RC[1],""y"")"
ActiveCell.Offset(0, 3) = ActiveCell.Offset(0, 3) & " años."
Application.CutCopyMode = False
End If
End Sub

Si haces cambios a la solicitud original que es la que dio pie al código enviado, debes enviarme nuevamente todas las referencias. No sé cuál es tu celda activa, no se dónde estás colocando las fechas, ... y como verás el código sigue funcionando bien.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas