PROGRAMAR LA FUNCIÓN SIFECHA EN VBA

Hola a todos:

El post de hoy va a tratar de cómo podemos programar la función SIFECHA en vba. Como sabéis en VBA existe otra función similar (Dateiff) pero a diferencia de la primera, en esta no podemos obtener los meses o los días en relación al año en curso: por ejemplo: no es lo mismo decir que desde que nací han pasado 39 años, 9 meses y 27 días que decir que desde que he nacido han pasado 39 años o ( en meses) 477 meses o (en días) 14.548 días. Lo que nos interesa es obtener en VBA los 39 años, 9 meses y 27 días.

En VBA no existe como tal la función sifecha, para poder programarla es necesario evaluar la fórmula, es decir crearla en un string y aplicarla luego en la hoja para obtener el resultado. Antes de seguir os dejo un post anterior donde comento las diferencias entre dateiff y dateif y otro método muy similar de programación: FUNCIÓN DIASEM, FORMAT, TEXT, DATEDIFF Y DATEDIF PARA CALCULO DE FECHAS EN VBA

Bien, vamos a usar una seria de fechas de nacimiento para ilustrar nuestro ejercicio:

PROGRAMAR LA FUNCIÓN SIFECHA EN VBA

El código que vamos a utilizar es el siguiente:

Option Explicit
Sub SI_FECHA()
'Declaramos variables
Dim i As Long, fin As Long
Dim f_nac As Date, año As String, mes As String
Dim dia As String, titulos As Variant, t_rango As Range
'Recorremos fechas y guardamos valor en variable f_nac
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
For i = 2 To fin
f_nac = CDate(.Cells(i, 1))
'Generamos tres cadenas de texto con la fórmula "sifecha" aplicada para año, mes y día
año = "=DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""Y"")"
mes = "=DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""YM"")"
dia = "=DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""MD"")"
'Pasamos la información a las columnas 2, 3 y 4 respectivamente
.Cells(i, 2) = año
.Cells(i, 2).Value = .Cells(i, 2).Value
.Cells(i, 3) = mes
.Cells(i, 3).Value = .Cells(i, 3).Value
.Cells(i, 4) = dia
.Cells(i, 4).Value = .Cells(i, 4).Value
'Concatenamos la fecha completa con una única fórmula. (Se podría realizar también concatenando las columnas de año, mes y día).
.Cells(i, 5) = "=DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""Y"") &"" Años, ""& DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""YM"") &"" Meses, ""& DATEDIF(" & Chr(34) & f_nac & Chr(34) & "," & Chr(34) & Date & Chr(34) & " , ""MD"") &"" Días"""
.Cells(i, 5).Value = .Cells(i, 5).Value
Next i
'Mostramos encabezados
titulos = Array("AÑOS", "MESES", "DIAS", "FECHA COMPLETA")
Set t_rango = Worksheets("Hoja1").Range("B1:E1")
t_rango.Value = titulos
t_rango.Interior.Color = vbRed
End With
End Sub

Utilizando una instrucción For pasamos cada fecha de nacimiento a la variable f_nac para utilizarla en la función sifecha. Como podéis observar, escribimos la función en una cadena de texto que luego pasamos a la celda indicada en la Hoja1. Cuando la fórmula pasa a la celda obtenemos el mismo resultado que si la aplicásemos directamente como una función en la hoja.

Os he dejado por separado los años, meses y días y luego la fecha completa. Aunque lo que he realizado ha sido un concatenado de fórmulas con sifecha, esto también lo podéis hacer concatenando las celdas de las columnas 2,3 y 4 (por si os resulta más sencillo).

Y así es como podemos programar la función SIFECHA en VBA con variables incluidas en su sintaxis.

PROGRAMAR LA FUNCIÓN SIFECHA EN VBA1

Esta función también la he programado para ser usada en un formulario, os dejo el enlace al post: CALCULAR LA EDAD CON DATEDIF EN UN FORMULARIO DE EXCEL

Y eso es todo: como siempre os dejo el archivo de prueba:

Descarga el archivo de ejemplo pulsando en: PROGRAMAR LA FUNCIÓN SIFECHA EN VBA

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Anuncios

2 pensamientos en “PROGRAMAR LA FUNCIÓN SIFECHA EN VBA

    • Hola Flavio:

      No comprendo la consulta. A qué array te refieres? en este ejemplo estamos rellenando las fechas en una columna y hasta el fin del rango …

      Saludos

      Me gusta

¿Te ha gustado?, Realiza un comentario.

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.