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:
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:
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.
¡¡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
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?
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
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
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.