Obtener la Edad con la Fecha de Nacimiento

Cuando trabajamos con fechas los cálculos se pueden hacer muy complejas, no porque se requiera mucho trabajo si no porque resulta confuso.
Uno de los cálculos más comunes con las fechas es obtener la cantidad de años que hay entre dos fechas que normalmente es para obtener la edad de una persona.
La tarea parece sencilla pero puede ser algo confuso desarrollarla y seguramente en nuestro intento obtendremos resultados incorrectos las primeras veces pero con varias pruebas obtendremos la función correcta.
La función que yo utilizo para calcular la edad de una persona es la siguiente

Function getEdad(fechaNacimiento As Date)
    Dim año, mes, dia As Integer
    Dim dAño, dMes, dDia As Integer
    año = Format(fechaNacimiento, "yyyy")
    mes = Format(fechaNacimiento, "m")
    dia = Format(fechaNacimiento, "d")
    dAño = Format(Date, "yyyy") - año
    dMes = Format(Date, "mm") - mes
    dDia = Format(Date, "d") - dia
    If dMes < 0 Or (dMes = 0 And dDia < 0) Then
        dAño = dAño - 1
    End If
    getEdad = dAño
End Function

Es una función pequeña pero la clave esta en la sentencia IF que es cuando se verifica si se cuenta el año actual o no.

Para usar la función se debe colocar en un módulo y se llama de la siguiente forma

Dim edad as Integer
edad=getEdad("1990-06-25")
MsgBox "La edad es " & edad & " años"

Anuncios

7 pensamientos en “Obtener la Edad con la Fecha de Nacimiento

  1. Gran aporte, muchas gracias, ese código buscaba exactamente para el formulario de una aplicación que estoy desarrollando. Lo he aplicado y adaptado de esta forma. En lugar de esta línea: edad=getEdad(“1990-06-25”) , he puesto la misma pero sustituyendo la fecha por el nombre de un TextBox desde donde tiene que tomarla quedándome así: edad = getEdad(TextBox_FECHA_NACIMIENTO_EMPLEADO.Text). Funciona perfectamente pero resulta que ahora cuando le doy a un botón que me limpia el formulario me crea un conflicto, dándome un error 13 en tiempo de ejecución alegando que los tipos no son válidos, ¿cuál puede ser el problema?, muchas gracias y un saludo.

      • Lo más raro es que el formulario lo sigue limpiando bien como antes, pero cuando acaba de hacerlo me escupe el error que te comenté en la línea mencionada, espero podamos averiguar que pasa, muchas gracias de nuevo.

        Private Sub Vacia_Formulario()

        ‘Limpio TextBox

        Dim miCtrlTxt ‘Defino la variable
        For Each miCtrlTxt In UserForm_INICIO.Controls ‘Recorro todos los controles
        If TypeName(miCtrlTxt) = “TextBox” Then ‘Verifico cuales son TextBox
        miCtrlTxt.Value = “” ‘Vacío todos los TextBox
        End If ‘Fin de la condición
        Next

        ‘Limpio ComboBox

        Dim miCtrlCmb ‘Defino la variable
        For Each miCtrlCmb In UserForm_INICIO.Controls ‘Recorro todos los controles
        If TypeName(miCtrlCmb) = “ComboBox” Then ‘Verifico cuales son ComboBox
        miCtrlCmb.Value = “” ‘Vacío todos los ComboBox
        End If ‘Fin de la condición
        Next

        ‘Limpio Picture

        IMAGEN_EMPLEADO.Picture = LoadPicture() ‘Limpio imagen

        End Sub ‘Finalizo macro

  2. Private Sub edad_EMPLEADO()
    Dim edad As Integer
    edad = getEdad(TextBox_FECHA_NACIMIENTO_EMPLEADO.Text) ‘En esta línea me da el error, pero lo raro es que realiza su función correctamente
    TextBox_EDAD_EMPLEADO.Text = edad
    End Sub

    • ¿No tendrás un evento que llame a la función cada vez que se cambia el contenido del textbox? probablemente cuando limpias el textbox se ejecuta la función de calcular edad pero como no hay una fecha en el textbox te muestra el error.

      • Efectivamente, por eso no encontraba fallo en el código, porque no lo había, sino una dichosa llamada con un evento Change la cual creaba el conflicto, de todos modos aunque no haya habido error en el código, te agradezco que me hayas dado un poco de luz en el camino para descubrir que era. Mil gracias de nuevo y enhorabuena por tu encomiable tarea de facilitarnos la vida, con estas rutinas tan sencillas y complicadas a la vez. Un saludo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s