6 febrero, 2025

AÑADIR AÑOS, MESES Y DÍAS A UNA FECHA EN VBA

Hola a todos:

En el post de hoy veremos un método para añadir años, meses y días a una fecha. Esto normalmente en nuestra hoja de excel lo hacemos con la función FECHA() combinada con las funciones AÑO, MES Y DIA y sumando a cada función el número que se quiere aumentar.

En VBA tenemos una función específica para realizar esto, se trata de DATE.ADD con una sintaxis muy sencilla y que indico a continuación:

DateAdd(«Intervalo de tiempo», Número a sumar, «fecha»).

Estas son las expresiones que podemos especificar en el campo «Intervalo»:

yyyy Año
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
n Minuto
s Segundo

Sin embargo, esto solo funciona para un campo cada vez que utilizamos la función, es decir, no podemos añadir en la misma función años, meses y días.

Pero en VBA tenemos una solución muy sencilla, veamos el ejemplo:

AÑADIR AÑOS, MESES Y DIAS A UNA FECHA EN VBA

Para poder obtener el resultado que esperamos, utilizaremos la siguiente rutina:

Sub AÑADIR_FECHA()
'Declaramos variables
Dim i As Long, fin As Long
Dim años As Date, meses As Date, dias As Date
With Sheets("Hoja1")
'Borramos información de la columna E
fin = Application.CountA(.Range("A:A"))
If fin > 1 Then .Range("E2:E" & fin).ClearContents
'añadimos años, luego meses y finalmente días
For i = 2 To fin
años = DateAdd("YYYY", .Cells(i, 2), .Cells(i, 1))
meses = DateAdd("M", .Cells(i, 3), años)
dias = DateAdd("D", .Cells(i, 4), meses)
'Mostramos la nueva fecha
.Cells(i, 5) = dias
Next i
End With
End Sub

Y así obtenemos esto:

AÑADIR AÑOS, MESES Y DIAS A UNA FECHA EN VBA_1

Como podéis observar, a través de un for vamos añadiendo, primero los años, luego los meses y finalmente los días.

Y eso es todo por hoy, espero que os resulte de interés a la hora de realizar cálculos actuariales, financieros o de otro tipo : )

Descarga el archivo de ejemplo pulsando en: AÑADIR AÑOS, MESES Y DÍAS A UNA FECHA 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

Comparte este post

5 comentarios en «AÑADIR AÑOS, MESES Y DÍAS A UNA FECHA EN VBA»

  1. Hola. he entendido bien lo explicado en esta página, sin embargo, quiero añadir a la fecha de hoy (DATE), sólo días laborables, es decir, que se excluyan los días sábados y domingos, e inclusive los días que yo tengo identificados (en otras celdas), como días festivos, por ejemplo, si hoy fue viernes 22 de mayo y necesito sumar 2 días laborables, me tendría que mostrar como resultado el martes 26; y si a más de ello, el lunes 25 es festivo, el resultado sería miércoles 27. Quiero que me funciones como lo hace la fórmula «dia.lab» de excel. Me puedes ayudar con eso?

    1. Hola ALberto.

      Con esto podrás obtener la fecha con los días laborables:

      Sub Añadir_fecha()
      Dim i As Long, j As Long
      Dim fechaIni As Long, Mifecha As Date
      With Sheets("Hoja1")
      fin = Application.CountA(.Range("A:A"))
      For i = 2 To fin
      fechaIni = .Cells(i, 1)

      j = 0
      While j < .Cells(i, 2)
      fechaIni = DateSerial(Year(fechaIni), Month(fechaIni), Day(fechaIni) + 1)
      If Weekday(fechaIni, vbMonday) <= 5 Then
      j = j + 1

      End If
      Wend
      Mifecha = fechaIni
      .Cells(i, 3) = Mifecha
      Next i
      End With
      End Sub

      Copia el ejemplo del post, y quedate con tres columnas, en la A, la fecha inicio, en la B los días y en la C irá el resultado.

      En cuanto a los días festivos, etc. requiere un desarrollo mucho mayor. SI tengo tiempo intento programar algo.

      Saludos

      1. Muchas gracias por la respuesta. EStoy probando y en
        While j < Cells(i, 2) fechaIni = DateSerial(Year(fechaIni), Month(fechaIni), Day(fechaIni) + 1) If Weekday(fechaIni, vbMonday) <= 5 Then j = j + 1
        Me sale error de sintaxis

        1. Hola Alberto:

          No es un error de sintaxis, es el código html de la página que compone VBA sin tener en cuenta los saltos de línea.

          j = 0
          While j < .Cells(i, 2)
          fechaIni = DateSerial(Year(fechaIni), Month(fechaIni), Day(fechaIni) + 1)
          If Weekday(fechaIni, vbMonday) <= 5 Then
          j = j + 1

          Saludos.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies