30 julio, 2021

SUMAR AÑOS, MESES Y DÍAS A UNA FECHA

Hoy os traigo una entrada bastante interesante de como podemos utilizar algunas fórmulas para conseguir sumar a una fecha un determinado número de años, de meses o de días.

No es algo nuevo que nos encontremos en nuestros ejercicios y consultas con la necesidad de sumar un determinado número de años a una fecha concreta para proyectar cálculos futuros en nuestros supuestos.

Excel ofrece la función "FECHA.MES()" para poder sumar a una fecha x número de meses, en el ejemplo siguiente podéis verlo. Imaginad que tenemos una serie de fechas en la primera columna de una hoja y que necesitamos sumar a cada fecha 5 meses. Lo podemos hacer de esta forma:

SUMAR AÑOS, MESES Y DÍAS_1

Como podéis ver, en la fórmula detallamos en el argumento el número de meses que queremos sumar a la fecha inicial. Es un ejercicio muy sencillo y a la vez útil.

Pero vamos a complicar un poco más las cosas, no todo es tan fácil. Ahora resulta que lo que necesitamos es sumar a las fechas iniciales 5 años y también 5 días. Bien, para esto no tenemos una función nativa de Excel al igual que en el caso anterior, sino que debemos componer la fórmula nosotros mismos, la fórmula propuesta es esta:

=FECHA(AÑO(A2)+5;MES(A2);DIA(A2))

Lo que estamos haciendo es traernos la fecha y descomponer todos los elementos que la conforman, por una parte utilizamos la función fecha y por otra nos traemos el año, el mes y el día. Por ello, si queremos añadir 5 años, lo tenemos bastante sencillo, tan solo hay que sumar 5 años en la parte de la fórmula que hace referencia a los años. Para los días, hacemos exactamente lo mismo:

=FECHA(AÑO(A2);MES(A2);DIA(A2)+5)

y también para los meses, (que dará el mismo resultado que con la primera fórmula que hemos visto, "fecha.mes").

=FECHA(AÑO(A2);MES(A2)+5;DIA(A2))

Y es así como de esta forma podemos sumar años, meses y días cuando nuestros cálculos nos lo requieran. A modo de curiosidad también adjunto la función =DIASEM(A2;2), que nos ayudará a determinar en una escala del 0 al 7 el día de la semana en el que nos encontramos. Esta función la podemos adaptar según consideremos cuando empieza la semana, en este ejemplo utilizaré el 2, donde el lunes es igual a 1 y domingo igual a 7.

En esta imagen os dejo el resultado de haber aplicado todas las fórmulas, no os preocupéis, luego os lo dejaré en archivo para descargar.

SUMAR AÑOS, MESES Y DÍAS_2

Y como siempre me gusta añadir un ejemplo para aplicar las fórmulas aprendidas, os propondré lo siguiente, imaginad que trabajáis en unos grandes almacenes en el departamento de recursos humanos y os piden un informe donde se detalle el histórico de los departamentos en los que ha estado cada empleado y el tiempo que han estado trabajando en cada uno de ellos. Parece sencillo, pero el problema es que solo tenéis la fecha en la que ha empezado en cada departamento, esto es lo que tenéis:

SUMAR AÑOS, MESES Y DÍAS_3

Una vez vista la información, lo principal es ordenar los datos, primero ordenar las fechas de la más antigua a la más reciente y luego los nombres (o aquel operador que tengáis para distinguir a los empleados).

Luego debemos "reconstruir" la fecha de baja en cada departamento para poder calcular el tiempo exacto que ha estado en cada uno de ellos ( y no vale sacar una diferencia entre las fechas de alta, porque estaríamos añadiendo un día de más).

¿Cómo lo hacemos?, pues tenemos que echar mano, por una parte de la fórmula que hemos visto anteriormente y por otra de un condicional, de manera que distinga el momento en el que empezamos con el histórico de un empleado nuevo. Esta es la fórmula completa:

=SI(A2=A3;(FECHA(AÑO(C3);MES(C3);DIA(C3)-1));"")

La sintaxis que nos debemos preguntar para entender lo que vamos a hacer es la siguiente: Si el nombre es el mismo que el nombre siguiente, entonces a la fecha del próximo registro le vamos a restar un día, si el nombre cambia, la fecha quedará vacía, dado que el empleado sigue trabajando en ese departamento (lo vuelvo a repetir, es imprescindible ordenar las fechas de alta y los nombres o identificadores de cada empleado).

Visualmente quedaría así:

SUMAR AÑOS, MESES Y DÍAS_4

En el ejemplo, podéis ver como aplicando la fórmula, podemos cerrar la fecha fin y dejamos la celda en blanco cuando el empleado sigue con la fecha en vigor. Ahora estamos en condiciones de poder obtener la antigüedad del empleado en los departamentos en los que ha trabajado.

Para mostrar unos datos un poco más visuales, utilizaremos la función sifecha, que ya hemos tratado en otras entradas, y echaremos mano de un condicional y de la función concatenar.

=SI(ESERROR(CONCATENAR(SIFECHA(C2;D2;"y");" años y ";(SIFECHA(C2;D2;"ym"));" meses"));"Actualmente";CONCATENAR(SIFECHA(C2;D2;"y");" años y ";(SIFECHA(C2;D2;"ym"));" meses"))

Este es el resultado, espero que os haya resultado útil:

SUMAR AÑOS, MESES Y DÍAS_5

Descarga el archivo de ejemplo pulsando en: SUMAR AÑOS, MESES Y DÍAS

Comparte este post

31 comentario en “SUMAR AÑOS, MESES Y DÍAS A UNA FECHA

  1. Muy bueno, ahora... como haces para sumar de un mismo empleado de la tienda (por ejemplo) las varias antigüedades que tiene en un total final. Gracias!!

  2. Hola, ingresé esta formula de dos maneras en la suma de x años, como número y como referencia y en los dos casos me envía error, podrías comentarme por favor que estoy haciendo mal?, gracias por tus aportaciones y felices fiestas!

    =FECHA(AÑO(F10)+C8;MES(F10);DIA(F10))
    =FECHA(AÑO(F10)+18;MES(F10);DIA(F10))

    1. Hola Cuauhtémoc.

      utiliza el archivo de descarga, ahí funciona perfectamente.

      Por otra parte. Los datos de la fecha que estas usando en F10 están en formato adecuado,? Ese puede ser el error.

  3. Hola se puede sumar años meses y dias a una fecha, sin poner el tiempo en la formula sino tomarlo de una celda, por ejemplo tengo la fecha y necesito sumarle 2 años, 5 meses y 7 dias, pero estos datos los tengo en celdas, gracias la respuesta

  4. Hola:
    Tengo el siguiente caso: Necesito sumar fechas en base a una condición, ejemplo: Si el auto es marca "Chevrolet" y se reviso el 1/1/2020 tiene que volver a revisarse en 6 meses. Y si el auto es marca "Ferrari" y se revisó el día 20/03/2020, tiene que volver a revisión en dos años.
    ¿Existirá alguna formula o función que me ayude a sumar fechas de esta manera de manera automática según què marca es el auto?

    1. Hola Francisco:

      Para hacerlo debes utilizar un si condicional anidado. Teniendo en cuenta que en A2 tienes una fecha y en B2 una marca de automóvil, pega esta fórmula en C2:

      =SI(B2="Chevrolet";FECHA(AÑO(A2);MES(A2)+6;DIA(A2));SI(B2="Ferrari";FECHA(AÑO(A2)+2;MES(A2)+6;DIA(A2))))

      Saludos.

  5. Hola.
    Hacemos ventas durante el mes a una empresa, a la que le debemos informar hasta el día 13 del proximo mes las ventas del mes anterior.
    O sea, vendimos el 5 de mayo, el 10 de mayo, el 17 de mayo, debemos informarlas todas el 13 de junio, Y nos las pagan el 18 del proximo mes.
    En nuestro ejemplo 18 de junio.
    O sea todas las facturas del mes las informamos el 13 del proximo mes y las cobramos el 18 del proximo mes.
    Muchas gracias

  6. Perdon pero no quedo claro lo que quiero
    Quiero que se repita automaticamente la fecha 13 y 18 del proximo mes cuando la empleada escriba la fecha de la venta.
    Muchas Gracias

    1. Suponiendo que la fecha esté en A1 y según lo que has comentado podría ser esta una posibilidad:

      =SI(A1<FECHA(AÑO(A1);MES(A1)+1;"13");"informar el "&TEXTO(FECHA(AÑO(A1);MES(A1);"13");"dd/mm/aaaa") & " cobrar el "&TEXTO(FECHA(AÑO(A1);MES(A1);"18");"dd/mm/aaaa") )

      Saludos.

      1. Te agradezco mucho la respuesta, pero lo que necesito es muy simple que podemos no hacerlo con formulas
        La fecha en A1 es 5may20 y en la G1 aparecerá 13jun20, en la I1 18jun20
        La fecha en A2 es 8may20 y en la G2 aparecerá 13jun20, en la I2 18jun20
        La fecha en A3 es 10may20 y en la G3 aparecerá 13jun20, en la I3 18jun20
        La fecha en A15 es 31may20 y en la G15 aparecerá 13jun20, en la I15 18jun20

        La fecha en A22 es 5jun20 y en la G22 aparecerá 13jul20, en la I22 18jul20
        Gracias

  7. La primera vez que accedo a esta página. He visitado muchas páginas explicativas de excel; pero se me hace difícil recordar una que fuera tan concreta y, al mismo tiempo, lo suficientemente extensa para tratar de explicar diversos escenarios.

    Muchas gracias por compartir de una forma tan sencilla todos tus conocimientos.

    Había varios conceptos que ya conocía; pero ha sido bueno repasarlos.

    Sin duda volveré a realizar futuras consultas.

  8. Excelentes ejemplos, pero lastimosamente no se ajustan a mi necesidad.. agradezco si es posible que me ayudes... Tengo en una columna la fecha de expedición de un documento en formato dd/mm/aaaa, y en la columna siguiente la vigencia en meses de ese documento ... si quiero que Excel me calcule cuando pierde vigencia el documento, cómo podría hacer?

    Osea necesito que si el documento se expide el 01/01/2021, y tiene vigencia de 12 meses, me muestre en otra columna ya sea la fecha 01/01/2022, o algún mensaje que diga si está o no vigente. Agradezco cualquier ayuda.

    1. Hola:

      Cómo que no se ajusta a tu ejemplo, precisamente es idéntico: Vamos a ver, en esta fórmula A1 es la fecha que indicas y B1 los 12 meses, el resultado es el 01/01/2022.

      =FECHA(AÑO(A1);MES(A1)+B1;DIA(A1))

      Saludos.

  9. HOLA BUENAS NOCHES YO TENGO EL SIGUIENTE CASO NECESITO SACAR LA ANTIGUEDAD DE UNOS EMPLEADOS A LA QUINCENA 17 QUE EN TRABAJO FUE EL DIA 10 DE SEPTIEMBRE SI LA BASE DE DATOS QUE ME PROPORCIONAN ME DAN EL DATO EN ESTA CATEGORIA 05-207 ES DECIR 05 AÑOS - 207 DIAS Y YA TRANSCURRIERON 24 DIAS MAS COMO PUEDO OBTENER UNA FORMULA CON LOS DATOS QUE TE SEÑALO GRACIAS

    1. HOLA BUENAS NOCHES YO TENGO EL SIGUIENTE CASO NECESITO SACAR LA ANTIGUEDAD DE UNOS EMPLEADOS A LA QUINCENA 17 QUE EN TRABAJO FUE EL DIA 10 DE SEPTIEMBRE SI LA BASE DE DATOS QUE ME PROPORCIONAN ME DAN EL DATO EN ESTA CATEGORIA 05-207 ES DECIR 05 AÑOS - 207 DIAS Y YA TRANSCURRIERON 24 DIAS MAS COMO PUEDO OBTENER UNA FORMULA CON LOS DATOS QUE TE SEÑALO GRACIAS
      ESTA DESABILITADO EL CORREO QUE HABIA DEJADO Y ME URGE UN POQUITO LA RESPUESTA GRACIAS

      1. Estimado , tengo un preguntan, tengo un listado de productos con fecha de producción, y fecha de vencimiento, necesito una formula que me sume 90 días como máximo para que caduque y me diga VENCIDO , y usar otra condicionante que me avise antes de llegar a los 90 dias, puede ser 70 dias, y que me diga ESTA POR VENCER es posible??

        1. Sí, es posible. Tienes que utilizar Si condicional, y fecha.

          Por ejemplo para vencido, pon en A1 una fecha de caducidad y si hoy es +90 días es mayor que esa fecha entonces está vencido.
          =SI(FECHA(AÑO(HOY());MES(HOY());DIA(HOY()+90))>A1;"vencido";"no vencido")

          Prueba a hacer el siguiente condicional, saludos.

  10. Hola,
    hago una liquidación a los clientes el último lunes de cada mes, ¿puedo sacar ese día con fórmulas de fechas?
    Muchas gracias.
    Un saludo,

  11. Hola, Segu
    Está formula no funciona muy bien cuando, por ejemplo, solamente quieres sumar meses y entre medias hay un cambio de año. Por ejemplo, si tengo la fecha 2/11/2020 y aplico la formula para sumar 3 meses, me devuelve 2/2/2020, no 2/2/2021.
    Algo similar ocurre cuando quieres sumar meses o días y la fecha es la última del mes, en este caso, si el resultado de dia() es 31 y el mes es de 30 o 28 días, te aparece la fecha del día o los días siguientes del mes siguiente. ¿habrá alguna forma de solucionarlo?
    Te adjunto una formula que estoy desarrollando con este problema, es muy especifica y con muchos condicionantes pero, la idea es sumar a la fecha de la columna C los meses o los días marcados en la columna M (con el formato #m para meses y el formato #d para días): =FECHA(AÑO(C190);MES(C190)+SI(DERECHA(M190;1)="m";VALOR(IZQUIERDA(M190;LARGO(M190)-1));0);DIA(C190)+SI(DERECHA(M190;1)="d";VALOR(IZQUIERDA(M190;LARGO(M190)-1));0))
    Gracias

    1. Hola Ricardo:

      Qué fórmula estás usando??:

      Estas son las que están:

      Donde en A2 está la fecha que dices,

      =FECHA(AÑO(A2);MES(A2)+3;DIA(A2))

      o

      =FECHA.MES(A2;3)

      El resultado es 02/02/2021

  12. Muy interesante esta fórmula. Necesito una fórmula que al poner una fecha, me saque 5 días hábiles después de esa fecha, sin sábado ni domingo.

    1. Con esta UDF lo puedes hacer sin problema.

      Copia y pega en modulo de Vba, y busca funcion DIAS_LAB_ENTRE y selecciona fecha e indica número de días a generar:

      Function DIAS_LAB_ENTRE(ByVal inicio As Date, num As Long)
      'Declaramos variables
      Dim nCont As Date
      Dim sCadena As String, fsem As String
      Dim matriz As Variant, j As Double
      Dim miArray As Variant
      With Sheets("FECHAS")
      n = 1
      Do While n <= num
      nCont = DateAdd("w", 1, inicio)
      inicio = nCont
      fsem = Format(inicio, "ddd")
      If fsem <> "sá." And fsem <> "do." Then
      sCadena = Trim(sCadena & " " & inicio)
      n = n + 1
      End If
      If n > num Then Exit Do
      Loop
      'pasamos la información de la matriz a la hoja
      matriz = Split(sCadena, " ")
      ReDim miArray(0 To UBound(matriz))
      For j = 0 To UBound(matriz)
      miArray(j) = Format(matriz(j), "dd/mm/yyyy")
      Next j
      DIAS_LAB_ENTRE = Application.Transpose(miArray)
      End With
      End Function

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