EUCOOKIELAW_BANNER_TITLE

Le date in Excel – II Parte

calendario

Nel precedente articolo abbiamo iniziato a vedere come vengono gestite le date in Excel, abbiamo scoperto cos’è una data seriale e abbiamo esplorato alcune formule che ci permettono di sommare giorni, mesi o anni ad una data nonché alcune funzioni per convertire stringhe in date.

DIFFERENZA FRA DATE

In questo articolo continuiamo l’esplorazione delle date con le funzioni che ci permettono di calcolare le differenze temporali fra di esse. Come abbiamo già appreso non si tratta altro che di calcolare la differenza tra due numeri interi che rappresentano i giorni passati dal primo gennaio del 1900.

Il metodo più semplice è, ovviamente, sottrarre la data meno recente a quella più recente, quindi, se le date sono, rispettivamente, in B2 (01/09/2015) e C2 (01/01/2015) basterà scrivere

=B2-C2

nella cella dove abbiamo inserito la formula verrà restituito il numero di giorni passati fra le due date (243). Invertendo l’ordine delle date avremo, invece, lo stesso numero ma negativo (-243), inconveniente che può essere risolto mettendo la sottrazione come parametro della funzione ASS() che ritorna un numero assoluto

=ASS(C2-B2)

differenza fra date

Esempi di differenza fra date

Ma se non vi servisse il numero di giorni ma il numero di mesi? Per questa operazione esiste una funzione apposita di Excel che, però, non viene documentata nella guida, non viene elencata tra le funzioni ne tantomeno dispone dell’autocompletamento in cella, si chiama DATA.DIFF()

=DATA.DIFF(prima_data;seconda_data;formato)

  • prima_data è la data meno recente (C2 nel nostro esempio)
  • seconda_data è la più recente (B2)
  • formato è uno dei seguenti parametri
    • “d” (day) per ottenere la differenza in giorni
    • “m” (months) per ottenere la differenza in mesi
    • “y” (years) per ottenere la differenza in mesi
    • “yd” per ottenere la differenza in giorni senza contare gli anni
    • “ym” per ottenere la differenza in mesi senza contare gli anni

Riprendiamo il nostro esempio ma cambiamo la data in C2 anticipandola di un anno, quindi 01/01/2014 e vediamo come, cambiando il parametro, cambia il risultato

=DATA.DIFF(C2;B2;"d")

restituisce il numero di giorni fra 01/09/2015 e 01/01/2014 ovvero 608

=DATA.DIFF(C2;B2;"m")

restituisce il numero di mesi ovvero 20

=DATA.DIFF(C2;B2;"y")

restituisce il numero di anni, 1

=DATA.DIFF(C2;B2;"yd")

restituisce la differenza fra il 01/09 e il 01/01 ignorando gli anni, quindi 243

=DATA.DIFF(C2;B2;"ym")

restituisce la differenza in mesi fra il 01/09 e il 01/01 senza considerare gli anni, quindi 8.

differenza-tra-date-excel-con-date-diff

Esempi di differenza date con DATA.DIFF()

[random_sc]

LA FUNZIONE GIORNI()

Si comporta come l’esempio appena visto DATA.DIFF(C2;B2;”d”) e restituisce solo il numero di giorni intercorsi tra due date

=GIORNI(C2;B2)

NUMERO DELLA SETTIMANA DELL’ANNO

In molte occasioni si usa indicare il numero di settimana dell’anno per pianificare scadenze, eventi ed altro ancora. Anche se ci sono molti calendari o agende che rappresentano questo numero sulle loro pagine possiamo sempre ricorrere ad Excel con la funzione NUM.SETTIMANA()

=NUM.SETTIMANA(numero_seriale;[tipo_restituito])

  • numero_seriale rappresenta la data della quale vogliamo sapere in che settimana dell’anno cade
  • tipo_restituito è un valore opzionale a scelta tra 1 e 2 che determina il tipo di numero restituito:
    • con 1 viene considerata come prima settimana dell’anno quella che contiene la data 1 gennaio
    • con 2 viene considerata come prima settimana dell’anno quella che contiene il primo giovedì dell’anno

CHE GIORNO E’?

Se la vostra necessità è sapere in che giorno della settimana cade una data (come per questo esempio) la funzione che fa per voi è GIORNO.SETTIMANA(). Questa funzione richiede due parametri

=GIORNO.SETTIMANA(data;[tipo_restituito])

  • data rappresenta appunto la data della quale volete sapere il giorno
  • tipo_restituito è un valore numerico opzionale che determina come verrà rappresentato l’intervallo restituito:
    • 1 (predefinito): il valore restituito andrà da 1 (domenica) a 7 (sabato)
    • 2: da 1 (lunedì) a 7 (domenica) (n.d.a. è quello che uso solitamente nelle mie formule)
    • 3: da 0 (lunedì) a 6 (domenica)
    • 11: come valore 2
    • 12: da 1 (martedì) a 7 (lunedì)
    • 13: da 1 (mercoledì) a 7 (martedì)
    • 14: da 1 (giovedì) a 7 (mercoledì)
    • 15: da 1 (venerdì) a 7 (giovedì)
    • 16: da 1 (sabato) a 7 (venerdì)
    • 17: come valore 1

Preferisco il valore 2 (o 11) per il semplice motivo che se voglio sapere se una data cade nel weekend mi basta controllare se il valore restituito è maggiore di 5

=GIORNO.SETTIMANA(A1;2)>5

se in A1 abbiamo la data 01/09/2015 il valore restituitò sara 3, ovvero mercoledì, è la formula darà come risultato FALSO. Inoltre con questo sistema, combinato con la funzione SCEGLI(), possiamo facilmente scrivere in una cella il nome del giorno della settimana mantenendo l’ordine naturale dei giorni

=SCEGLI(GIORNO.SETTIMANA(A1;2);"lunedì";"martedì";"mercoledì";"giovedì";"venerdì";"sabato";"domenica")

E con questo concludiamo la carrellata sulle funzioni base delle date, ci sono ancora alcune funzioni per uso più specifico e “di nicchia” come GIORNO.360() o GIORNO.LAVORATIVO() ma le affronteremo più avanti anche se, comprese le basi, vi sarà facile intuirne il funzionamento.

In un prossimo articolo vi illustrerò, inoltre, come gestire ore, minuti e secondi.

A presto


MESSAGGIO DALL'AUTORE
Hai trovato questo blog utile o interessante? Lascia una tua opinione sul guestbook per farmi sapere cosa ne pensi e come possa migliorarlo.

gianfranco

Appassionato di informatica, fotografia e di tecnologia in generale. Esperto nell'uso di Excel e con tanta voglia di condividere le sue conoscenza con il mondo, sempre pronto a dare una mano (ma non più di due volte, altrimenti rimango senza).

Potrebbero interessarti anche...

12 Risposte

  1. PAOLA ha detto:

    Buon dì
    Per favore, su una tabella
    A1 = data1
    B1 = data2 [=OGGI()] che in tabella nasconderei
    C1 = formula … =B1-A1 e ho la differenza dei giorni tra una data e un altra….. OK 🙂
    vorrei che la formula continuasse ( anche nascondendo il risultato C1, a me interessa vedere il risultato della formula come più avanti descritta)

    SE C1 è <a o = a 0 colora la cella A1 di rosso.

    questo per avere visivamente una data in scadenza o scaduta segnalata in tabella, aggiornata.

    Aiuto sto impazzendo…. devo usare le macro?

    Grazie Grazie Grazie
    Paola

    • PAOLA ha detto:

      ops è scomparso un pezzetto di commento!!….la parte più importante…

      SE C1 è < a 90 colora la cella A1 di giallo
      SE C1 è o = a 0 colora la cella A1 di rosso

      Grazie Paola

    • gianfranco ha detto:

      Ciao Paola,
      Non servono macro ed è una cosa abbastanza semplice. Ora sono nel traffico, tempo di arrivare a casa e ti rispondo con la soluzione 🙂

    • gianfranco ha detto:

      Ciao Paola,
      come promesso eccomi qui con la soluzione. Tanto per cominciare ti suggerisco di mettere in B direttamente la formula


      =OGGI()-A1

      così non ti serve nascondere la colonna e risparmi sulle dimensioni del file e i tempi di calcolo. Una volta fatto clicca con il tasto destro sulla cella contenente la formula (es. B1), seleziona “Formato Celle” e nell’elenco scegli “Numero”, quindi imposta il “Numero dei decimali” a 0.

      Fatto questo puoi passare alla formattazione che ti permette di colorare le celle. Devi posizionarti sulla cella contenente la data (es A1) e quindi cliccare su “Formattazione condizionale” nella sezione “Home” della barra degli strumenti e, dalla tendina, scegli “Nuova regola”

      Fatto questo seleziona l’elemento della lista chiamato “Utilizza una formula per determinare…..”

      Ora, nella stessa maschera, inserisci nel campo “Formatta i valori per cui questa formula restituisce Vero” la seguente formula:


      =E(B1<90;B1>=0)

      clicca quindi sul bottone “Formato”, ti si apre una nuova maschera, in alto scegli “Riempimento” quindi seleziona il colore giallo

      Clicca OK per chiudere una maschera, quindi OK di nuovo.

      Creiamo la seconda regola, devi di nuovo aggiungere una formattazione condizionale, solo che la formula da inserire, questa volta, è la seguente:


      =B1>90

      e il colore, ovviamente, sarà ROSSO.

      Ultimo passaggio, prendi nota delle celle che contengono le date, es A1:A50, quind da “Formattazione condizionale” scegli “Gestisci regole”, si apre una maschera, nella colonna “Si applica a” scrivi le celle che ti sei segnata (Es. =A1:A50)

      E’ più difficile spiegarlo che farlo 🙂

      Se hai bisogno chiedi pure

      Gianfranco

      • PAOLA ha detto:

        Perfetto Gianfranco, grazie, spiegazione semplice riuscita perfettamente ad applicarla, ma mi sono accorta che il mio ragionamento era errato. perché in quel modo avrei visto da quanto tempo il certificato ( perché di questo si tratta ) è stato fatto, vorrei invece che si evidenziasse quando si avvicina a scadenza. Quindi…se possibile toglierei o nasconderei la casella che mi dice quanti giorni si discostano dalla data ( in realtà è un dato più o meno superfluo, importante sapere che il certificato è prossimo alla scadenza) , per intenderci la casella B2 e quindi modificherei

        A1 data certificato con cella che diventa gialla se sono passati tra 275 e 335 giorni (mancano da 3 a 1 mese di scadenza)
        A1 data certificato con cella che diventa rossa se sono passati più di 335 giorni ( manca meno di 1 mese alla scadenza)
        A1 cella rossa se manca una data che significa che il certificato non è stato consegnato

        Ti ringrazio

        • gianfranco ha detto:

          Ciao Paola,
          se il numero di giorni non ti interessa puoi usare questo sistema, crea 2 regole per la Formattazione condizionale come illustrato nel commento precedente usando le seguenti formule:

          Per la cella GIALLA

          =E(OGGI()-A1>275;OGGI()-A1<335)

          Per la cella ROSSA

          =OGGI()-A1>=335

          Se ci son problemi sono sempre qui 🙂

  2. PAOLA ha detto:

    Grazie Gianfranco, ho risolto.
    Grazie per la disponibilità e la celerità della tua risposta, ti ho messo nei preferiti! utilizzo molto excel ma per quanto mi sforzi ha ancora molti lati oscuri, soprattutto per quanto riguarda le formule ( e mi accorgo che a volte sono solo problemi di logica e di ragionamento… uff, la fretta!); se posso approfitterò ancora della Tua Conoscenza per risolvere i miei problemi, grazie ancora
    Paola

    • gianfranco ha detto:

      Ciao Paola,
      grazie per i complimenti 🙂 … puoi contattarmi ogniqualvolta tu abbia bisogno, anche attraverso l’indirizzo email che trovi nella sezione “Contattami”. Se ti è piaciuto e ti è stato utile il blog condividilo, così avrò più persone da aiutare 🙂

      A presto

  3. Biagio ha detto:

    Buongiorno, il mio quesito è il seguente : nella colonna A ho date a 6 cifre, in B il corrispettivo visualizzato in giorni della settimana “ggg’. Vorrei creare una tabella che mi conta quanti sono i lunedì, martedì, etc. Come faccio capire al programma che deve contare i giorni? Grazie

  4. Mickey71 ha detto:

    Ciao , Avrei la necessita di calcolare un livello di servizio ( espresso in secondi) facendo la differenza tra 2 dataora (data1= 04/07/2017 10:07:20, data2 =31/08/2017 17:15:00) contando il fatto che 1giornata e’ di 10ore … mi puoi aiutare ?
    PS: Utilizzo Excel 2016 in inglese

  5. Diego Sala ha detto:

    ciao, ho un quesito;
    in vba,ma a sto punto mi viene il dubbio, in excel generale, il conta.se funziona con le date complete solamente, o anche con ad esempio solamente gli anni?
    mi spiego, nella colonna A, ho 5000 date, m interessa sapere quante volte si ripete l anno 2006(un anno a caso), per ripetere intendo quante date ci sono,aventi l anno 2006.
    poi questo valore verrà utilizzato in una variabile,che mi servirà per fare l autofill di una tabella, nel caso in cui la variabile sia maggiore di 52

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: