Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Función DateAdd (Teoría Nagele)

| 8 comentarios

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.

  1. 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.
  2. 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.
  3. 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:

Dibujo_1

(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.

Dibujo_2

Dibujo_3

(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

Dibujo_4

(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

Dibujo_5

(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.

Dibujo_6

(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:

Dibujo_7

(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

8 comentarios

  1. Consulta, existe una función similar que nos devuelva una fecha posterior de "n" días hábiles.

    Saludos,
    Wilbert Ríos

    • 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

      '*********************************************************************

  2. 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.

  3. 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.

    • 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.

  4. Buenas. Al abrir el archivo pude visualizar las instrucciones en el editor VBA, pero no pude ejecutar la Macros porque no aparece en lista.

  5. Muy interesante para el cálculo de fechas

  6. 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

Deja una respuesta

Los campos requeridos estan marcados con *.