Excel - Macro para obtener Iniciales y Edad

 
Vista:

Macro para obtener Iniciales y Edad

Publicado por guillermo gonzalez colman (4 intervenciones) el 21/08/2018 00:45:38
Estimad@s,
He estado usando los foros para guiarme en algunos resumenes de trabajo que quiero aplicar.
Estoy con una planilla que en:
- Columna A tiene Nombres.
-Columna B Apellidos.
-Columna C Fecha de Nacimiento.

Quiero hacer una macro que me de:
-en la columna D las Iniciales de Nombre y Apellido
-en la columna E la edad.

Lo hice Manualmente grabando la macro, pero al agregar filas de datos, tengo que modificar toda la macro.

Si pueden guiarme muchas gracias!!
Slds.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por Antoni Masana (2486 intervenciones) el 21/08/2018 06:44:07
Para la Columna D esta formula en la fila 1

1
=IZQUIERDA(A1;1) & IZQUIERDA(B1;1)

Para la Columna E esta formula en la fila 1

1
=ENTERO((HOY()-C1)/365.25)

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de gilman
Val: 8
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por gilman (4 intervenciones) el 21/08/2018 08:35:39
El problema con la formula:
1
=ENTERO((HOY()-C1)/365,25)
Es que en determinados casos devolverá datos erroneos, por ejemplo, si calculamos la edad de un niño que ha nacido exactamente hace un año devolverá 0, cuando debería dar 1.
lo mejor es, en un módulo, crear la función:
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Edad(ByVal FechaNacimiento As Date) As Integer
 
    Dim d As Date
    'Edad coincidira con el valor esperado si ya ha cumplido años este año
    Edad = DatePart("yyyy", Date) - DatePart("yyyy", FechaNacimiento)
    d = DateSerial(DatePart("yyyy", Date), DatePart("m", FechaNacimiento), DatePart("d", FechaNacimiento))
    If d > Date Then
        'No ha cumplido años este año, tiene un año menos
        Edad = Edad - 1
    End If
 
End Function
Y llamarla desde la hoja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por Antoni Masana (2486 intervenciones) el 21/08/2018 10:41:50
Mi formula solo tiene un error y es que si naciste por ejemplo el 26 de mayo dice que tienes un año el 27 de mayo de año siguiente.
Para que lo diga el mismo 26 de mayo falta un pequeño detalle:

1
==ENTERO( ( HOY() - C1 + 1 ) / 365,25 )

Si un bebe nace el 1 de enero de 2018, hasta el 31 de diciembre de 2018 tiene 0 años y el 1 de enero de 2019 tiene un año.

Comprovado. Con esta rectificación la dos soluciones, la Fórmula y la Función, dan el mismo resultado.

Gracias Giman por la observación.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 8
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por gilman (4 intervenciones) el 21/08/2018 11:10:42
¿Has comprobado tu formula?
Acabo de probarlo y los resultados no son correctos:

Captura

Adjunto el excel con la prueba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por Antoni Masana (2486 intervenciones) el 21/08/2018 11:37:33
La formula correcta es esta:

1
=ENTERO( ( HOY() - C1 + 1 ) / 365,25 )

y no esta

1
=ENTERO( ( HOY() - C1 ) / 365,25 + 1 )

Adjunto archivo con fórmula corregida.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 8
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por gilman (4 intervenciones) el 21/08/2018 12:07:18
No es por llevarte la contraría, simplemente que este tema se trato en otro foro:
http://www.foro.vb-mundo.com/forum/programacion/visual-basic-6-00/19946-problema-para-calcular-la-edad-a-partir-de-fecha-de-nac
y ahora se plantea el problema con los años bisiestos, y determinados casos extremos:
Supongamos que Hoy es 31/12/2016 y aplicamos tu formula para calcular la edad de alguién nacido el 01/01/2016, el resultado obtenido sería 1 año que no es correcto, adjunto excel, donde se puede apreciar el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por Antoni Masana (2486 intervenciones) el 21/08/2018 12:36:17
Es horroroso el trabajo con fechas. Mea culpa por no probarlo suficientemente.

Mi formula falla cara una vez al año cada cierto número de años, dependiendo se si es antes o después del 29 de febrero, y si es el 29 son todos los años.

Lo más correcto es la función.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Macro para obtener Iniciales y Edad

Publicado por Guillermo (4 intervenciones) el 21/08/2018 15:07:00
Muchas gracias por la ayuda.

Yo para la edad había definido una formula:

1
2
3
4
5
6
7
Public Function calcular_edad(ByVal fecha_nacimiento As Date) As Integer
Dim ahora As Date
ahora = Format(Now, "dd/MM/yyyy")
fecha = fecha_nacimiento
edad = DateDiff("yyyy", fecha, ahora)
calcular_edad = edad
End Function

Pero tengo el mismo problema con algunos errores.
....y no había pensado en los años bisiestos aún.

Muchas gracias por la guía estimados.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por Antoni Masana (2486 intervenciones) el 22/08/2018 13:09:00
Por si alguien tiene curiosidad.

La macro de Gilman en fórmula:

1
=AÑO(Hoy())-AÑO(C2) - SI((MES(Hoy())*100)+DIA(Hoy()) < (MES(C2)*100)+DIA(C2);1;0)

Donde en C2 está la fecha de nacimiento.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 8
Ha aumentado su posición en 2 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para obtener Iniciales y Edad

Publicado por gilman (4 intervenciones) el 22/08/2018 13:46:28
El problema con DateDiff es que usa redondeo, y si alguíén tiene X años y mas de 6 meses, devuelve X+1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar