1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

Fórmula para calcular los años bisiestos

Tema publicado en 'Ideas y aportes' iniciado por pegones1, 1 Mar 2012.

  1. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    Para calcular los años bisiestos uso esta fórmula que me dice que los años de 366 días puedo ganar más dinero que los que tienen un día menos:

    CÓDIGO:
    =REDONDEAR(MONEDA("4/"&A1)-MONEDA("4/"&A1-1);0)=366
    En A1 el número con el año a comprobar si es bisiesto en que la fórmula anterior dará un valor VERDADERO.
  2. Fleming

    Fleming Incondicional de Ayuda Excel

    Registrado:
    30 Sep 2008
    Mensajes:
    2.411
    Me Gusta recibidos:
    166
    Género:
    Masculino
    Hola Pegones1

    Me gustaría que te prodigases más por estos lares.

    Me quedo con tu fórmula y la incorporo a mi colección con el número (V) del archivo adjunto.


    Un saludo

    Adjuntos:

    Última edición: 5 Mar 2012
  3. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Muy buena Pedro, pero falla en 1900.

    Saludos
  4. Fleming

    Fleming Incondicional de Ayuda Excel

    Registrado:
    30 Sep 2008
    Mensajes:
    2.411
    Me Gusta recibidos:
    166
    Género:
    Masculino
    Así es, Elías. Falla en los anteriores a 1901

    La que parece más segura, aunque un poco larga, es:



    Un saludos
  5. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Creo que se puede recortar un poco.

    CÓDIGO:
     
    =SI((RESIDUO(B4;400)=0)+(RESIDUO(B4;4)=0)*(RESIDUO(B4;100)<>0);"";"No ")&"Bisiesto"
     
    Saludos
  6. Macro Antonio

    Macro Antonio Incondicional de Ayuda Excel

    Registrado:
    12 May 2010
    Mensajes:
    5.183
    Me Gusta recibidos:
    843
    Hola friends:

    Yo a lo mío,......jejeje

    CÓDIGO:
    Public Function ESBISIESTO(Año As Range) As Boolean   
    
       ESBISIESTO = False
       
       If Año.Cells.Count > 1 Then
          Beep
          Exit Function
       End If
       
       If IsNumeric(Año.Value) = False Then
          Beep
          Exit Function
       End If
       
       r100 = Año.Value Mod 100
       r1000 = Año.Value Mod 1000
       r4 = Año.Value Mod 4
       
       If r4 = 0 And (r100 > 0 Or r1000 = 0) Then
          ESBISIESTO = True
       End If
    
    End Function
    
    
    

    Fórmula: (Devuelve Verdadero/Falso)
    CÓDIGO:
    [B]=[COLOR=#b22222]ESBISIESTO[/COLOR]([COLOR=#0000ff][I]A1[/I][/COLOR])[/B]


    Saludos
    Última edición: 1 Mar 2012
  7. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    Macro, ¡tenías que hacer de las tuyas!. Mira que el título dice "Fórmula ..." :cheerful:


    sailepaty
    , falla en en años anteriores a 1900 y posteriores a 9999, pero avisa al generar #¡VALOR!


    Por cierto, ¡"igualico" que Micro$oft Excel con las fechas! :greedy_dollars:

    Sus límites son:

    [TABLE="class: collapse"]
    [TR="class: trbgeven, bgcolor: #F3F3F3"]
    [TD]Primera fecha permitida en un cálculo[/TD]
    [TD]1 de enero de 1900 (1 de enero de 1904, si se utiliza la fecha del sistema)[/TD]
    [/TR]
    [TR="class: trbgodd"]
    [TD]Última fecha permitida en un cálculo[/TD]
    [TD]31 de diciembre de 9999[/TD]
    [/TR]
    [/TABLE]

    [DBOX]Especificaciones y límites de Excel - Excel - Office.com[/DBOX]


    Fleming
    , tu fórmula la he visto antes!!! (similar a la versión MacroAntoniana) :moon:

    [DBOX]Method to determine whether a year is a leap year[/DBOX]



    Tengo que recordar aquí (porque me viene muy a mano) el bug del año 1900, considerado erróneamente bisiesto por Excel:

    [DBOX]Excel 2000 incorrectly assumes that the year 1900 is a leap year[/DBOX]


    Gracias por vuestros comentarios y si sois buenos, al menos un día de este año bisiesto (que no es mucho pedir), os dejaré mi colección de fórmulas para calcular años bisiestos. :suspicion:
  8. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    1.-Me parece que el mes de febrero de 1900 esta dendro de esos limites, no?
    2.-Quiere significar que por que Excel no calcula bien es correcto que tu formula no la haga?


    Se te agradecerá enormemente, siempre listo para aprender algo nuevo. Ojala y sean mas originales que las que posteo Chandoo!!!

    Saludos
  9. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Otra opción que me encontré en el baúl, pero desafortunadamente no recuerdo de donde la obtuve.

    =SI(RESIDUO(A1;100);RESIDUO(A1;4);RESIDUO(A1;400))=0

    Saludos
  10. Macro Antonio

    Macro Antonio Incondicional de Ayuda Excel

    Registrado:
    12 May 2010
    Mensajes:
    5.183
    Me Gusta recibidos:
    843
    Hola de nuevo:

    Esta función es tan pequeña, que parece una fórmula:
    CÓDIGO:
    Public Function ESBISIESTO(Año As Range) As Boolean
    [B]ESBISIESTO = Day((DateSerial(Año, 3, 1) - 1)) = 29[/B]
    End Function
    
    Y aporta otro método distinto al que hemos empleado hasta ahora:

    Preguntar si el día anterior al 1 de Marzo es 29. (*)

    Besitos para todos.

    * (Sobre una idea de Adrian en TodoExcel)
    Última edición: 3 Mar 2012
  11. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    Macro, ¿por qué no preguntas directamente si el 29 de febrero es un día del calendario?

    Esta fórmula es la más corta que conozco:
    CÓDIGO:
    Public Function EsAñoBisiesto(Año As Range) As Boolean
          EsAñoBisiesto = IsDate("29/2/" & Año)
    End Function
    Esta función convertida en fórmula para calendarios en español y en inglés:
    CÓDIGO:
    =NO(ESERROR(FECHANUMERO("29/02/"&A1)))
    =NOT(ISERROR(DATEVALUE("2/29/"&A1)))
    Es un honor para mí compartir este foro con macronianos como tú. :eek:
    Última edición: 3 Mar 2012
  12. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Siguiendo la logica de Pedro aqui va otra,

    =AÑO(("1/1/"&A1)+365+(A1=1900))=A1

    Saludos
  13. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    sailepaty, está muy bien tener en cuenta en tu fórmula que el año 1900 no fue bisiesto.

    CÓDIGO:
    [COLOR=#333333]=AÑO(("1/1/"&A1)+365+(A1=1900))=A1[/COLOR]
    Vamos a darle una vuelta de tuerca más a las fórmulas para calcular los años bisiestos. :sneakiness:
    Para cualquier fórmula profesional se tiene que tener en cuenta el rango correcto de entradas para obtener la salida adecuada y esta vez ¡con la Iglesia hemos "topao"! :star:

    El 4 de octubre de 1582 fue el último día del calendario juliano y el 15 de octubre de 1582 fue el primer día del calendario gregoriano y ese año tuvo 10 días menos, siendo el primer año bisiesto de la historia, establecido por el Papa Gregorio XIII en su bula Inter gravisimas.

    [DBOX]Año bisiesto - Wikipedia, la enciclopedia libre
    [/DBOX]

    Por lo tanto, cualquier año anterior a 1582 no puede ser bisiesto y habrá que tenerlo en cuenta en las fórmulas.
  14. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Definitivamente no dejemos que Don Gregorio nos arruine el calculo.

    CÓDIGO:
    =(SI(RESIDUO(A1;100);RESIDUO(A1;4);RESIDUO(A1;400))+(A1<=1582))=0
     
    [COLOR=#333333]=AÑO(("1/1/"&A1)+365+(A1=1900)+(A1<=1582))=A1[/COLOR]
    
    Saludos
    Última edición: 4 Mar 2012
  15. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    sailepaty, como comentaste que lees el foro de Chandoo, estoy posteando algunas de mis fórmulas en inglés.

    [DBOX]Check if an year is leap year, using Excel Formulas | Chandoo.org - Learn Microsoft Excel Online[/DBOX]

    En el foro de Chandoo llevamos publicadas 25 fórmulas para calcular los años bisiestos.

    Es un honor que Rick Rothstein (MVP - Excel) haya replicado a alguna de mis sugerencias, siendo que escribe en uno de los blogs más famosos de Excel que os invito a leer si aún no lo conocéis:

    [DBOX]Contextures Blog[/DBOX]
    Última edición: 5 Mar 2012
  16. sailepaty

    sailepaty Incondicional de Ayuda Excel

    Registrado:
    4 Oct 2008
    Mensajes:
    1.356
    Me Gusta recibidos:
    58
    Pedro,

    Felicidades por el honor que te causa la replica de Rick Rothstein. Sin embargo me parece que el blog al que haces referencia pertenece a Debra Dalgleish y Rick replica a los post que ella efectúa. Sin embargo y sin estar muy seguro creo haber leído algunos posts que el inicia con la autorización de Debra.

    Y para no dejar de replicar y tal y como diría Rick. Similar a la formula de Pedro pero con una función menos.

    CÓDIGO:
    [SIZE=2][FONT=arial] =ISNUMBER(1*(A1*(A1>1900)&"-02-29"))[/FONT][/SIZE]
    [SIZE=2][FONT=arial] 
    =ESNUMERO(1*(A1*(A1>1900)&"-02-29"))
    [/FONT][/SIZE]


    Saludos
  17. pegones1

    pegones1 Incondicional de Ayuda Excel

    Registrado:
    27 May 2010
    Mensajes:
    619
    Me Gusta recibidos:
    214
    Género:
    Masculino
    sailepaty, gracias por la aclaración. Es lo que me pasa por leer demasiados blogs de Excel. Aunque sí, Rick escribe a menudo en el blog de Debra (autora de Contextures).

    Ahora si que te ha quedado redonda. ¡Un diez maestro!
  18. jrgces

    jrgces Usuario

    Registrado:
    28 Feb 2011
    Mensajes:
    75
    Me Gusta recibidos:
    1
    Las más cortas que he conseguido yo nunca han sido:

    CÓDIGO:
    =DIA(1*("1/3/"&A1)-1)=29
    que falla para 1900, y:

    CÓDIGO:
    =DIA(1*("1/3/"&A1)-1+(A1=1900))=29
    que no falla para 1900.


    Saludos.

Compartir esta página