sábado, 16 de enero de 2016

Función personalizada en Excel: EDAD a través del RFC

Cómo parte de las actividades de comercialización, en ocasiones es necesario segmentar por edades una base de datos (cartera de clientes o prospectos). Si conocemos su RFC (Registro Federal de Contribuyentes) o su CURP (Clave Única de Registro de Población), tenemos los elementos necesarios para establecer su fecha de nacimiento y con ello su edad.

En Excel existen diferentes funciones preestablecidas con las que podemos trabajar estos cálculos, particularmente yo recurrí por un tiempo a la siguiente:

Como vemos, es una fórmula relativamente extensa , que si se aplica con frecuencia, la lógica nos indica que deberíamos crear nuestra propia función y así simplificar el trabajo. Fue así que me decidí por hacerla y en las siguientes líneas escribo el código de Visual Basic.

Function EDAD(RFC As String) As Integer
'
' EDAD Macro
' Calcula la edad a partir del RFC o CURP del cliente
'
Dim fecha As Date
Dim anio As String
Dim DIA As String
Dim MES As String
    
    hoy = DateValue(Now)
    current = Year(hoy) - 2000
    DIA = Mid(RFC, 9, 2)
    MES = Mid(RFC, 7, 2)
        If Val(Mid(RFC, 5, 2)) < current Then
        anio = Val(Mid(RFC, 5, 2)) + 2000
    Else
        anio = Val(Mid(RFC, 5, 2)) + 1900
    End If
    fecha = DIA & "/" & MES & "/" & anio
    EDAD = Int(DateDiff("d", fecha, hoy) / 365.25)
  
End Function

En donde RFC, es una celda que contiene una secuencia de valores alfanum éricos  y cuyos primeros 10
dí gitos son del tipo ABCD650123, tanto para el caso del RFC como de la CURP.
, el resultado es una función con una sintaxis sumamente sencilla:

=EDAD(Celda_RFC_o_CURP)

Con lo que nuestra celda luce ahora así:



Para descargar el archivo con la función personalizada pulsa aquí.
También elaboré un pequeño tutorial para su instalación el cual puedes descargar dando click aqui.

Espero que les sea de utilidad, ya que puede ser explotado en diversas áreas.

6 comentarios:

  1. Buenos días, gracias por compartir, pero la Function EDAD tiene un detalle realiza un calculo erróneo de los años de nacimiento a partir del 2017 , podrías revisarla y compartir la solución

    ResponderBorrar
    Respuestas
    1. Hola Fabian, gracias por escribir. Ya hice la corrección de la macro.
      Te agradecería mucho si la puedes probar.
      Saludos

      Borrar
    2. Gracias, para el caso de los CURP de personas mayores a 100 años, por ejemplo
      CEZU180702MYNHVS08 me marca erróneo la edad, podrías revisar por favor

      Borrar
    3. Hola Fabian, a partir de la información que contiene la CURP, no existe forma de saber si se trata de una persona con más de 100 años. Esos casos se resuelven manualmente, o en su defecto, si trabajas mayoritariamente con información de adultos mayores, podrías ajustar la macro.
      Saludos.

      Borrar
    4. Muchas gracias por tu valioso contenido y por tu tiempo, gracias por compartir tu conocimiento. Es correcto.

      Borrar