Non perdere tempo! Strategie per lavorare efficacemente con date e orari in Excel
![Non perdere tempo! Strategie per lavorare efficacemente con date e orari in Excel](https://www.espero.it/wp-content-secure/uploads/2024/06/1-titolo-1-640x640.png)
Le funzioni data/ora in Excel sono un insieme di strumenti potenti che consentono agli utenti di gestire e manipolare informazioni temporali all’interno dei fogli di calcolo. Queste funzioni sono essenziali per una vasta gamma di applicazioni, che vanno dalla pianificazione di progetti alla gestione delle scadenze, alla creazione di report finanziari e molto altro ancora.
In questo articolo parleremo di dati temporali, della loro gestione e di una serie di funzioni che potrai utilizzare in vari ambiti, sia che tu stia lavorando con date di calendario, orari di inizio e fine, o periodi temporali più complessi.
Come Excel memorizza date e orari?
Excel gestisce date e orari considerando entrambi come fossero numeri. Una data è memorizzata come il numero intero di giorni trascorsi dal 31 dicembre 1899: 1 è il 1 gennaio 1900, 2 il 2 gennaio,… (curiosamente 0 viene interpretato come il 0 gennaio 1900!). Un orario invece viene memorizzato come un numero decimale tra 0 (incluso) e 1 (escluso) e rappresenta la quantità di tempo trascorsa dalla mezzanotte: 0,5 rappresenta ad esempio mezzogiorno (non dovrebbe stupirti, dal momento che è la metà di 1, ossia di un giorno).
Questa particolare modalità di gestione ti permette di utilizzare banali addizioni e sottrazioni per compiere calcoli su date od orari. Ad esempio per capire quanti giorni trascorrono tra 2 date basterà sottrarle; analogamente per trovare la data di pagamento di una fattura a 90 giorni da una certa data di partenza ti basterà sommare a quest’ultima il numero 90 (ti consiglio di sommare 91, che è un multiplo intero di 7, così non rischi che la data di pagamento di una fattura a 90 giorni da un lunedì capiti di domenica). Con gli orari Excel ti permette di usare una sintassi testuale semplificata, ad esempio per sommare 2 ore, 25 minuti e 59 secondi ad un orario puoi scrivere +”2:25:59″. Questa sintassi però diventa scomoda se ore, minuti e secondi da sommare si trovano in altre celle o derivano da altri calcoli (dovresti costruire il testo concatenando varie fonti): meglio quindi rammentare che 1/24 rappresenta un’ora, 1/24/60 rappresenta 1 minuto e 1/24/60/60 rappresenta 1 secondo e moltiplicare tali frazioni per le quantità desiderate.
Come puoi formattare date/orari?
La formattazione corretta delle date e degli orari è fondamentale per garantire la leggibilità e l’accuratezza dei dati. Per approfondimenti sui formati personalizzati (e tra questi anche quelli su date e orari) ti consiglio di leggere l’articolo Aumenta le performance di Excel: i segreti dei formati numerici personalizzati ed il precedente Ottimizza la tua produttività: alla scoperta dei formati numerici in Excel. Ricorda che i segnaposti per giorno e anno differiscono nelle varie localizzazioni (es: g e aaaa in italiano, d e yyyy in inglese) e che sarà inutile agire sul formato se Excel non riconosce che una data è tale e si ostina invece a considerarla come testo perché ad esempio trova prima il mese e poi il giorno: per risolvere questo problema ti invito a leggere l’articolo Un classico intramontabile di Excel: lo strumento “Testo in colonne”.
Principali funzioni data/ora
Tra le funzioni più basilari puoi trovare OGGI() (che restituisce la data odierna) e ADESSO() che restituisce la data comprensiva di orario fino ai secondi. Potresti ad esempio utilizzare la prima funzione per generare un elenco con 3 date casuali comprese tra i 7 giorni scorsi e i 7 futuri, elencate dalla più vecchia alla più recente:
=DATI.ORDINA(MATR.CASUALE(3;1;OGGI()-7;OGGI()+7;VERO))
DATI.ORDINA() e MATR.CASUALE() sono 2 funzioni che generano matrici dinamiche; sono abbastanza recenti per cui non potrai utilizzarle in Excel 2019 e versioni precedenti.
Saper formattare correttamente date e orari diventa necessario quando vuoi costruire dei testi concatenando più parti, perché una semplice formula come la seguente
=”Data di stampa: ” & ADESSO()
mostrerà il numero seriale di data/orario (es: Data di stampa: 45434,4697813657 ossia quasi mezzogiorno del 45434° successivo al 31/12/1899). Potrai risolvere usando la funzione TESTO(), che richiede di specificare il formato desiderato, ad esempio
=”Data di stampa: ” & TESTO(ADESSO();”gg/mm/aaaa hh:mm:ss”)
Altre funzioni molto utili sono:
DATA()
Usala per costruire una data in sicurezza a partire dalle 3 componenti anno, mese e giorno.
ANNO(), MESE(), GIORNO(), ORA(), MINUTO(), SECONDO()
Usale per ottenere le relative 6 componenti di una data/orario. Excel non dispone di una funzione che restituisca il trimestre a cui appartiene una data ma, se questa fosse nella cella A1, puoi ricavarlo ad esempio con
=QUOZIENTE(MESE(A1)+2;3)
In alternativa potresti mappare le 12 casistiche utilizzando la funzione SCEGLI() oppure pensare di creare una funzione personalizzata in VBA…
DATA.MESE()
Usala per aggiungere (o sottrarre) un certo numero di mesi ad una data (utile per calcolare anniversari/mesiversari senza aggiungere il numero di giorni, da calcolare considerando la diversa lunghezza dei mesi).
FINE.MESE()
Usala per calcolare l’ultimo giorno del mese in cui cade una certa data, eventualmente incrementata/decrementata di un certo numero di mesi. Ad esempio per calcolare come data di pagamento degli stipendi più recente l’ultimo giorno del mese scorso, potresti scrivere
=FINE.MESE(OGGI();-1)
oppure per calcolare il primo giorno del prossimo mese (senza costruire la data dalle sue singole componenti e dover prevedere un controllo per il possibile cambio di anno):
=FINE.MESE(OGGI();0)+1
ma sommando 1 all’ultimo giorno del mese precedente) o di mesi futuri (senza dover prevedere un controllo per il cambio di anno).
GIORNO.SETTIMANA()
Usala per ricavare il progressivo (generalmente 1-7) del giorno della settimana di una data; scegliendo opportunamente il secondo argomento della funzione puoi decidere se ad esempio il lunedì debba essere rappresentato come il giorno 1, 2,… Sfruttando la coincidenza che il numero 1, espresso come data, rappresenta il 1 gennaio 1900 e che tale giorno era una domenica, puoi decidere di formattare con “ggg” o “gggg” il risultato della funzione (con secondo argomento omesso) e leggere direttamente il giorno della settimana (ed usare per esempio tale dato per creare una tabella pivot che mostri il carico di chiamate helpdesk distribuito nei 7 giorni della settimana, indipendentemente dalle date in cui esse hanno avuto luogo).
Potresti utilizzare questa funzione anche per evidenziare con un altro colore di sfondo le righe di una Tabella in cui le date appartengono al weekend: applica all’intera tabella una formattazione condizionale basata sulla seguente formula, che restituirà Vero quando la data presente in prima colonna sarà un sabato o una domenica:
=GIORNO.SETTIMANA($A3;2)>5
Ti consiglio di applicare la formattazione condizionale a Tabelle piuttosto che a semplici intervalli in modo tale da non dover manutenere l’intervallo di applicazione mano a mano che l’elenco si arricchisce di nuovi elementi o ne perde alcuni.
Nota come nell’esempio la cella A3 sia la prima contenente i dati e come io abbia bloccato con il carattere di $ il riferimento alla colonna A in modo che la data da valutare sia sempre cercata in quella prima colonna e non nelle successive al momento di formattare le celle con Oggetto e Importo.
Funzioni data/ora particolari
Nel precedente esempio la riga con la data del 1 maggio non è stata colorata perché era un mercoledì. Senza scomodare funzioni personalizzate in VBA, potresti scrivere in un intervallo di celle (magari con un nome associato, ad es. vacanze, o meglio ancora usa una Tabella) l’elenco delle date da considerare come giorni di festa e poi modificare la formula della formattazione condizionale in modo che diventi
=O(GIORNO.SETTIMANA($A3;2)>5; NON(VAL.NON.DISP(CONFRONTA($A3;vacanze;0))))
Non è detto che tu debba compilare manualmente i giorni festivi aggiuntivi, puoi sempre sfruttare le funzioni che ti ho descritto per ricavarli. Ad esempio potresti calcolare la data del Giorno del Ringraziamento di un anno (il 4° giovedì di novembre, cui segue il Black Friday) scrivendo la seguente formula, che lo calcola come 3 settimane (=21 giorni) dopo il primo giovedì (che ha progressivo settimanale=5):
=DATA(anno;11;1)+ SE( GIORNO.SETTIMANA(DATA(anno;11;1))<=5;
5 – GIORNO.SETTIMANA(DATA(anno;11;1));
5 – GIORNO.SETTIMANA(DATA(anno;11;1)) +7
) +21
Una volta mappati a parte i giorni festivi particolari, potrai sfruttarli anche all’interno di altre funzioni, come ad esempio GIORNI.LAVORATIVI.TOT.INTL() e GIORNO.LAVORATIVO.INTL(), che ne tengono conto per restituire rispettivamente i giorni lavorativi tra 2 date e il prossimo giorno lavorativo successivo ad un altro.
Per terminare, ti segnalo la funzione DATA.DIFF(), presente già da molte versioni di Excel ma non documentata (non la troverai nel menu a tendina delle funzioni data e ora e neanche Excel te ne suggerirà la sintassi. Questa funzione calcola la differenza tra 2 date nelle unità di misura specificate dall’utente (per queste dovrai usare la sintassi inglese, ossia y per gli anni, ym per il resto in mesi e md per il resto in giorni). Ad esempio per calcolare l’età di una persona con data di nascita dnasc, puoi scrivere
=DATA.DIFF(dnasc;OGGI();”y”) & ” anni ” & DATA.DIFF(dnasc; OGGI();”ym”) & ” mesi ” & DATA.DIFF(dnasc;OGGI();”md”) & ” giorni”
Conclusioni
Una conoscenza approfondita di come Excel gestisce le informazioni temporali e le funzioni ad esse correlate è essenziale per migliorare la precisione dei calcoli, condurre analisi più sofisticate, automatizzare processi, creare visualizzazioni e report avanzati e facilitare l’integrazione con altre piattaforme e sistemi aziendali, garantendo la coerenza delle diverse informazioni.
Che tu sia un principiante o un esperto, è sempre utile esplorare nuovi modi per ottimizzare il proprio flusso di lavoro e migliorarne l’efficienza. Per un supporto più esaustivo e guidato puoi seguire il nostro corso Microsoft Excel Expert oppure richiedere un percorso formativo personalizzato: contattaci per maggiori informazioni!
![Giuseppe Zufus, DOCENTE IT / ORACLE SQL EXPERT](https://www.espero.it/wp-content-secure/uploads/2023/12/Avatar.png)