• Calcolare il giorno di Pasqua con Excel

    calcolo-giorno-pasqua-300.jpg

    Il calcolo della data di una particolare vacanza può essere utile in particolari calcoli di giornate lavorative, di ferie o di calendari. Purtroppo nè Excel nè il Visual Basic usato per le macro hanno delle funzioni interne complete per semplificare il lavoro con i giorni di vacanza, quindi ogni funzione dovrà essere autonomamente pensata e realizzata specificamente per lo scopo che si ha in mente.

    In termini generali le date di giorni di vacanza possono essere divise in due categorie: date fisse (esempio: Natale o ferragosto) e date variabili (es: Pasqua). Le date fisse possono essere calcolare in maniera agevole visto che si ripetono anno dopo anno, mentre più complicato è il discorso relativo alle date variabili.

    Partendo dal caso più elementare possiamo affermare che calcolare la data esatta (in formato data) di un giorno festivo come Natale è semplice e si può fare semplicemente inserendo una formula come questa in una cella:

    = DATE(YEAR(NOW());12;25)

    Il calcolo di una data variabile è invece complicato e dipendente dall’algoritmo esatto usato per calcolare la data stessa. E purtroppo l’algoritmo esatto per il calcolo della data del giorno di Pasqua in ogni anno del calendario gregoriano è estremamente complesso. La Pasqua infatti è definita come “la prima domenica dopo la prima luna piena seguente l’equinozio invernale”. Questa definizione teorica è difficilmente trasferibile in un semplice algoritmo per computer in quanto servirebbe la conoscenza esatta delle lune piene, degli equinozi e soprattutto delle approssimazioni cicliche introdotte nel calendario gregoriano.

    Una dotta disquisizione fra esperti del settore può aiutare chi voglia approfondire tutti i dettagli della questione, assieme a dimostrazioni matematiche degli algoritmi più adatti per il calcolo. Ma ai nostri lettori interessa di certo una soluzione pratica non troppo difficile da implementare. Questa deriva da anni di ottimizzazione e da sperimentazioni fatte per varie gare di programmazione tenutesi nel corso degli ultimi anni.

    Si possono raccomandare due principali metodi di calcolo della data esatta di Pasqua. Il primo metodo è semplicissimo da implementare e basato su funzioni interne di Excel (senza macro/VBA) e funziona per gli anni dal 1900 al 2078. Assumendo che l’anno di cui si voglia calcolare la data di Pasqua sia nella cella A1 (ad esempio di valore 2009), per calcolare la data di Pasqua basterà usare la seguente funzione:

    =FLOOR(DATE(A1;5;DAY(MINUTE(A1/38)/2+56));7)-34

    Per avere una data più precisa e cioè una data che vada bene per ogni epoca temporale del calendario gregoriano e giuliano invece ci si dovrà affidare ad un calcolo fatto con una macro VBA, come quella riportata su questo sito. Tale macro potrà essere inserita all’interno del vostro foglio di calcolo e richiamata dove necessario per una precisione costante in ogni epoca temporale presente e futura.

    Tags:

    Se vuoi aggiornamenti su Calcolare il giorno di Pasqua con Excel inserisci la tua e-mail nel box qui sotto:


    Ho letto e acconsento l'informativa sulla privacy

    Si No

    Acconsento al trattamento dei dati personali di cui al punto 3 dell'informativa sulla privacy

    Si No

    Commenti

    1. maibe dice:

      esiste una macro in vba decisamente più “corta” e pienamente funzionale rispetto a quelle citate dal vostro articolo, a questo indirizzo:
      http://ennius.altervista.org/vba/vba108.php#53)

    2. Demetrio Porcino dice:

      Maibe, ti ringrazio del commento.
      Non sono d’accordo con il tuo suggerimento e non posso raccomandare il tuo sito per due motivi:

      a) per chi cerca semplicità la funzioncina su una semplice riga tutta interna Excel descritta sopra è perfetta. Anzi ha il vantaggio di essere ‘portatile’ fra diverse versioni di Excel e di funzionare alla perfezione anche su Open Office, senza alcuna dipendenza da macro esterne!

      b) per chi preferisce la precisione, la macro di Nikolai Sandved è davvero il top che esista a mio parere e per diversi motivi. E’ precisissima, testata da migliaia di persone e funziona con OGNI DATA nel Calendario Gregoriano e Giuliano! (senza alcuna eccezione, mentre la tua funzione è limitata agli anni 1583-2499 e per gli altri risponde ‘Impossibile Calcolare’). Se poi a qualcuno importasse anche il numero di righe, la tua macro occupa 54 righe, quella di Sandvev (tolti i commenti) sono 38 righe! Quindi la macro che suggerisci ha meno funzionalità ed è decisamente più lunga!

      Nella redazione dell’articolo ho valutato diverse funzioni presenti in giro per il web e mi sento di raccomandare senza ombra di dubbio quella di Nikolai Sandved che è di gran lunga la migliore esistente oggi!

    3. Cheope dice:

      equinozio invernale??? O_o
      Va bene che si capisce lo stesso, ma non è corretto.
      Il 21 marzo è l’equinozio di primavera. Di invernale c’è il solstizio, che cade il 21 dicembre.

    4. Demetrio Porcino dice:

      La dizione scientifica pienamente corretta per la Pasqua è “la prima domenica dopo la prima luna piena seguente l’equinozio vernale”.

      Il termine equinozio vernale (termine usato sopratutto in astronomia) è comunemente forse più noto come equinozio di primavera (21 Marzo) e quindi ringraziamo l’utente Cheope per la precisazione.

    5. Monica. dice:

      La formula o il passo indicato non va’!!!!!!!!!!

      FLOOR(DATE(A1;5;DAY(MINUTE(A1/38)/2+56));7)-34

      Poi con questa non calcoli nessuna pasqua, almeno provatele con excel 2003 base prima di dire.
      Grazie.

    6. Demetrio Porcino dice:

      Monica,
      uno fra i vantaggi evidenziati per la soluzione ‘semplice’, di cui lei ha riscritto la formula, è proprio la sua assoluta portabilità e funzionalità su ogni versione (e senza supporto necessario per alcuna macro!!!).

      Il risultato che vede sopra è stato da me testato con successo su Excel 2003 SP1 (senza nessuna aggiunta/variazione al pacchetto base). Nell’esempio ho due semplici colonne: la prima con l’anno e la seconda con il calcolo (automatico con la formula su data) del giorno di Pasqua e funziona alla perfezione.

      Se dovesse riscontrare qualche difficoltà nel parsing automatico delle funzioni dall’inglese, provi con la stessa funzione adattata manualmente all’italiano:

      =ARROTONDA.DIFETTO(DATA(A2;5;GIORNO(MINUTO(A2/38)/2+56));7)-34

    7. Demetrio Porcino dice:

      Aggiungo solo che nell’esempio del commento sopra la data va inserita nella cella A2 (ad esempio se si vuole usare la prima riga per commenti/headers).

      Per rimanere su un foglio di calcolo i cui valori partano dalla prima riga, le due formule sono:

      =FLOOR(DATE(A1;5;DAY(MINUTE(A1/38)/2+56));7)-34
      (inglese)

      =ARROTONDA.DIFETTO(DATA(A1;5;GIORNO(MINUTO(A1/38)/2+56));7)-34
      (italiano)

    8. roberto mariconda dice:

      La formula per Excel in Italiano ha un errore; la funzione non è “MINUTO” ma “MINUTI”.
      [Testato con Excel 2010].

    9. Crichi78 dice:

      Grazie infinite Demetrio…!!! Mi serviva proprio una formula così semplice per implementare il mio personale foglio presenze!!! Anche se non ho idea della logica che ci sta dietro la versione in italiano funziona alla grande su excel 2007! :-)

      P.S.: per roberto mariconda solo per info su excel 2007 va bene “MINUTO” anzichè “MINUTI”

    10. Marco dice:

      Salve, ho 15 anni e mi diletto con la programmazione tra cui anche quella del VBA. Se può interessare io ho creato una piccola serie di funzioni con lo scopo di calcolare i reali giorni lavorativi in un determinato periodo e tra queste c’è anche quella per il calcolo della Pasqua.
      Qui c’è una spiegazione dettagliata della mia funzione GiorniLavorativi e dei video tutorial che spiegano l’utilizzo delle varie funzioni.
      Spero che la segnalazione possa essere utile

    11. GINO dice:

      Ho provato la funzione in italiano e dal 1900 al 3000 va bene mi trova tutte le Domeniche di Pasqua ma non ce né una il 22 di Marzo e so che può capitare anche in questo giorno. La formula ha un difetto? Ringrazio comunque perché è incredibile che funzioni così bene saluto

    12. Kar.ma dice:

      La formula non restitusce sempre il valore corretto. Ad esempio sbaglia il calcolo dell’anno 2011. Ho realizzato una funzione più complessa, ma più precisa, che ho il piacere di condividere. Le formule sono scritte per la versione italiana di Excel.

      =DATA(A1;3;22+RESTO(24+19*RESTO(A1;19);30)+RESTO(5+4*A1+2*RESTO(A1;4)+6*RESTO(24+19*RESTO(A1;19);30);7))

    13. Kar.ma dice:

      Ho dimenticato di aggiungere che la formula da me fornita, basata sul metodo di Gauss, è valida solo per il periodo tra il 1900 e il 2099

    14. naming dice:

      @kar.ma
      La tua formula è fantastica, funziona a meraviglia! Grazie mille!

    Commenta

    Your email address will not be published. Required fields are marked *