Funcion DateAdd
La función DateAdd, se traduce de modo literal a “añadir fecha”, pero esta VBA se define por funcionalidad como:
<<Función que genera una fecha variable (mayor o menor) bajo un determinado intervalo (día, mes ó año) considerando de base una fecha determinada>>
La sintaxis base a utilizar debe considerarse del siguiente modo:
DateAdd ( Intervalo variable<<día – mes – año>>, Variabilidad <<+/->>, fecha base)
La función requiere para su aplicación algunos criterios importantes para evitar error y además toma parámetros reales de temporalidad para evitar errores.
- Las celdas donde se requiera trabajar deberán tener un formato de FECHA, pero además se deberá considerar el tipo de calendario con el cual se esté trabajando.
- En caso que el usuario realice una programación que busque un resultado que requiera un resultado <100, el programa arrojará error. Otros errores clásicos son: el Error 5 cuando el intervalo no es valido y el Error 13 cuando la fecha no es válida.
- Además si tenemos el caso de DateAdd (“m”, 1, “31-Ene-2012), este automáticamente generará una fecha real <<28 – Feb – 2012>>
Por lo tanto buscaremos aplicar la función en el siguiente caso práctico:
El Servicio de Gineco – Obstetricia del Centro de Salud PUCP, requiere automatizar el cálculo de Fecha Probable de Parto (FPP) de las gestantes atendidas en su institución. Para resolver este punto nos basaremos en la “ Teoría de Nagele”, la cual refiere que para calcular la FPP debemos tener la Fecha de Última Regla (FUR) y a esta fecha se suma 7 días y se restan 3 meses. de este modo tenemos lo siguiente:
1. Generamos una Base de Datos de registro:
(Para mayor visualización de la imagen, hacer click en la misma)
2. Debemos verificar el formato de las celdas a trabajar y las celdas donde se aplicará la función también deberán contener el formato FECHA y se verificará el tipo de calendario con el cual se trabaja.
(Para mayor visualización de la imagen, hacer click en la misma)
3. Se procede a generar el Macro, con el objetivo de demostrar el uso exclusivo de la Función DateAdd, diseñaremos un Macro de doble actividad
a. Utilizaremos la función DateAdd para incrementar 7 días a la FUR
(Para mayor visualización de la imagen, hacer click en la misma)
Esta función, modificará en la fecha en 7 días, pero no los meses, por lo tanto colocaremos este dato comodín en la Hoja 2
(Para mayor visualización de la imagen, hacer click en la misma)
b. Con el comodín calculado, volveremos a la programación y continuaremos con la programación para realizar la resta de 3 meses a la fecha.
(Para mayor visualización de la imagen, hacer click en la misma)
De este modo podemos tener el la Hoja uno el Cálculo de la FPP de modo certero:
(Para mayor visualización de la imagen, hacer click en la misma)
Este algoritmo como se muestra en el ejemplo tiene la limitación para cálculos de fecha que modifiquen el año, para mejorar este caso podrían explorarse otras funciones que trabajen con Fechas.
Ver: Date_Add
Elaborador por: Paula Gabriela Ponce de León Lovatón
20/03/2013 a las 2:23 pm
Consulta, existe una función similar que nos devuelva una fecha posterior de "n" días hábiles.
Saludos,
Wilbert Ríos
19/05/2013 a las 10:53 pm
Estimado Wilbert: Si existe una función para devolver los "n" días hábiles, ésta es la función: =DIAS.LAB()
Considerar que puedes incluir los días feriados o festivos.
En código VBA sería lo siguiente:
'*********************************************************************
Sub N_LABORABLES()
Dim FECHA_INICIAL As Date
Dim FECHA_FINAL As Date
FECHA_INICIAL = "01/03/2013"
FECHA_FINAL = "01/04/2013"
n = WorksheetFunction.NetworkDays(FECHA_INICIAL, FECHA_FINAL)
Debug.Print n
'el resultado aparecerá en la ventana de "inmediato"
End Sub
'*********************************************************************
14/07/2013 a las 7:42 pm
Esta función también podría ser de mucha utilidad para llevar el registro de mercadería que se ha comprado al crédito en una determinada fecha y que de acuerdo al tipo de mercadería tiene una fecha de vencimiento que varía en un número de días. Por ejemplo en un distribuidor de productos Claro, al adquirir celulares Prepago el vencimiento de esa compra es a 30 días mientras que si el producto que compra son tarjetas de recarga su vencimiento es a 6 días.
05/09/2013 a las 9:01 pm
La macro del ejemplo no me resulto como "función" quizás alguien me puede explicar porque, pero lo modifique así y en una sola hoja1 todo ( lean el ejemplo dice hoja1 y hoja2 para la salida de resultados ¿?)
Sub FPP3()
Dim IntervaleType
IntervaleType = "d"
Dim number
number = 7
Dim FirstDate
FirstDate = Range("D5")
Worksheets("hoja1").Range("E5") = DateAdd(IntervaleType, number, FirstDate)
'repite con algunos cambios
Dim IntervaleType2
IntervaleType2 = "m"
Dim number2
number2 = -3
Dim FirstDate2
FirstDate2 = Worksheets("hoja1").Range("E5")
Worksheets("hoja1").Range("E6") = DateAdd(IntervaleType2, number2, FirstDate2)
End Sub
nota: el valor inicial FPP debe estar en la celda D5 de la hoja1 luego presione F5
salen fechas a los 7 y retrocede 3 meses.
Es buena esta función.
05/09/2013 a las 9:15 pm
En la explicación anterior coloque por error FPP, debí decir que en la celda D5 de la hoja1, escriba FUR (fecha ultima de regla) luego presione F5 salen las fechas a los 7 y la fecha retrocediendo 3 meses.
Ahora lo que le falta al resultado es sumarle un año para que sea el resultado real.
25/01/2014 a las 6:09 pm
Buenas. Al abrir el archivo pude visualizar las instrucciones en el editor VBA, pero no pude ejecutar la Macros porque no aparece en lista.
08/09/2014 a las 5:33 pm
Muy interesante para el cálculo de fechas
23/11/2015 a las 4:07 pm
que tal, quiero realizar una macro que me totalice (sume) todas las casillas que correspondan a un mismo mes, mas específicamente, tengo una hoja que tiene las siguientes columnas
fecha nro de factura nombre base imponible iva total
dd/mm/yyyy 0003 Pedro P. 100 12 112
quiero realizar una macro que identifique todas las filas de un mismo mes y que para todas las facturas realizadas en un solo mes sume la columna de base imponible, del iva y del total (como un libro de ventas) y que coloque el titulo total del mes de "enero" por ejemplo, alguien podría ayudar? eternamente agradecido