Calcular edad exacta en formulario de access

Señores buenas noches y cordial saludo. Mi pregunta es la siguiente. Tengo un formulario en access 2016 en el cual tengo los siguientes textbox. Fechanacimiento, número y edad actual. Lo que se quiere es que cuando digite la fecha de nacimiento el programa automáticamente calcula el número y la edad exacta expresada en años meses y días. ¿Cómo calcular el número?. Explico, tomando como base la fecha de nacimiento así:

Enero – Febrero = Bimestre 1

Marzo – Abril = Bimestre 2

Mayo – Junio = Bimestre 3

Julio – Agosto = Bimestre 4

Septiembre – Octubre = Bimestre 5

Noviembre – Diciembre = Bimestre 6

En el textbox de fecha de nacimiento digitaron 15 – 12 – 2016 (formato DD – MM – AAAA)

El numero lo va a calcular con base a la fecha de nacimiento así: buscaría para ver en que bimestre está el mes de la fecha, en este caso está en el bimestre 6. Buscaría para ver si es el primer o segundo mes del bimestre, en este caso es el segundo y por último tomaría los dos últimos dos dígitos del año. Formando así el siguiente número. 645 – 16 que sería:

6 es el número del bimestre. Diciembre está en el bimestre 6

45 sale de los 30 días de noviembre más los 15 de diciembre (Nació el 15 de diciembre)

16 son los dos últimos dígitos del año de la fecha de nacimiento y así se forma el número 645 – 17.

La fecha 12-07-2016 daria el número 412 – 16.  4 Bimestre. 12 Días del primer mes y 16 últimos dos dígitos del año.

27 – 02 – 2017 daría el número 157 – 17. Se forma así 1 primer bimestre, 57 los 30 días de enero más los 27 de febrero. 17 los dos últimos dígitos del año.

Por último con base a la fecha de nacimiento en el textbox edad actual se debe calcular la edad en años meses y días. Ejemplo. Digitando

01 – 02 – 2017 debe salir 0 Años 0 Mes 21 Días a hoy 22 de febrero del 2017

25 – 07 – 2016 debe salir 0 Años 6 Meses 28 Días a hoy 22 de febrero del 2017

15 – 01 – 2016 debe salir 1 Año 1 Mes 7 Días a hoy 22 de febrero del 2017

26 – 01 – 2008 debe salir 9 Años 0 Mes 27 Días a hoy 22 de febrero del 2017.

De antemano pido disculpas por extender demasiado la pregunta, pero para poderla explicar con claridad se hizo necesario.

1 respuesta

Respuesta
2

Para calcular la edad exacta mira la función (la segunda) de esta otra respuesta: He usado función para calcular la antigüedad de un trabajador en años y meses. Pero no consigo añadir los días

Para el número, puedes usar esta función:

Public Function fncNumero(laFecha As Date) As String
dim temp as integer
Select Case Month(laFecha)
    Case 1, 2
        temp = 1 & IIf(Month(laFecha) = 1, 0, 31) + Day(laFecha)
    Case 3, 4
        temp = 2 & IIf(Month(laFecha) = 3, 0, 31) + Day(laFecha)
    Case 5, 6
        temp = 3 & IIf(Month(laFecha) = 5, 0, 31) + Day(laFecha)
    Case 7, 8
        temp = 4 & IIf(Month(laFecha) = 7, 0, 31) + Day(laFecha)
    Case 9, 10
        temp = 5 & IIf(Month(laFecha) = 9, 0, 30) + Day(laFecha)
    Case 11, 12
        temp = 6 & IIf(Month(laFecha) = 11, 0, 30) + Day(laFecha)
End Select
fncNumero = temp & " - " & Right(Year(laFecha), 2)
End Function

teniendo en cuenta que el cálculo lo hago con el número de días naturales del primer mes del trimestre (31 o 30 según corresponda), pero es fácil de modificarlo en la fórmula. En tu último ejemplo tomas 30 días para enero, y no sé si fue por error o no.

Un saludo.


¡Gracias!

Buenos días Sveinbjorn El Rojo, muchas gracias por responder con prontitud, voy a probar ambas funciones y ya te estaré comentando. De antemano te doy un millón de gracias por tus respuestas

Hola  Sveinbjorn El Rojo, te comento que probé la función para obtener el número y esta perfecta, es exactamente lo que necesito.

La otra función para calcular los años no la he podido adaptar, parece ser que ella requiere de una fecha final y para mi caso la fecha final es la fecha actual, es decir, que la edad la va a calcular desde la fecha de nacimiento hasta la fecha actual (Fecha sistema). Te agradezco inmensamente si echas una manito con esto, como puedes notar mis conocimientos en esto son pobres.  De antemano gracias por tu ayuda  

Hola Sveinbjorn El Rojo, el que persevera alcanza, ya adapte la función a mis necesidades y me funciona perfectamente. Nuevamente te doy un millón de gracias por las respuestas y la prontitud con que lo haces.

Pues sí, revisando la respuesta, le falta algo a la función (porque la adapté de otra que uso) y es, o bien el parámetro laFechaFin, para que pongas en el la fecha del sistema o una linea dentro de la función que haga esa asignación, o sustituir todas las referencias a laFechaFin por Date.

De cualquier modo, me alegra saber que lo has solucionado por tu cuenta.

Un saludo.


Buenos días Sveinbjorn El Rojo, necesito de su ayuda. En esta función que hiciste para calcular el número de un animal teniendo en cuenta la fecha de nacimiento funciona ala perfeccion, solo que cuando el número de días es inferior a 10 lo muestra incompleto. Te explico. 

Supongamos que un animal nació el 5 de enero del 2017 el programa muestra 15-17. lo correcto es 105-17. te recuerdo un poco de donde sale este número. Los meses del año los tomamos por bimestre, enero - febrero es el bimestre 1 , marzo - abril es el 2 y así sucesivamente hasta noviembre - diciembre que es el bimestre 6. El primer número, o sea, el 1 es el bimestre, el segundo, o sea, 5 es el día del mes en que nace y por último el 17 son los dos últimos dígitos del año. lo que se quiere es que cuando el día del mes sea inferior a 10 le anteponga un cero (0). Te doy ejemplos. El formato es DD - MM - AAAA

Nace el 8 - 11 - 2017. Número dado por la función. 68-17. Lo correcto es 608-17. (El 6 es el bimestre, el 08 días del mes de noviembre y el 17 los dos últimos dígitos del año.  

Nace el 8 - 12 - 2017.  Número dado por la función. 642-17. Este es correcto. (6 bimestre, 42 los 30 días de noviembre + los doce de diciembre y el 17 los dos últimos dígitos del año).

De lo anterior concluimos lo siguiente si el animal nace en el primer mes del bimestre antes de los 10 primeros días debe anteponer un cero, es decir, si es 1 sería 01. si es 2 seria 02, si es 3 sería 03 y así sucesivamente hasta el 9.  De antemano te doy las gracias por la ayuda que me puedas brindar.

Eder Monterroza 

Pon:

temp = 1 & Format(IIf(Month(laFecha) = 1, 0, 31) + Day(laFecha),"00")

en todos los Case del Select

Gracias por tu pronta respuesta. Ahorita pruebo y te comento. 

Buenos días Sveinbjorn El Rojo, gracias por contestar con prontitud. Ya probé y ahora si quedo de maravilla, excelente tu respuesta, gracias, muchísimas gracias. Dios te colme de bendiciones y salud. La inteligencia ya la tienes y haces buen uso de ella, ayudando a tanta gente. Que bueno te felicito.

¿Pregunto?. Usted si estaría dispuesto a desarrollar un curso de Access el cual estoy interesado en hacer. Si su respuesta es si, por favor me envía un correo o un numero de celular donde pueda ponerme en contacto con usted para buscar forma de pago, vía a utilizar para el desarrollo del curso etc. etc

Eder Monterroza

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas