Scopriamo come creare un calendario su Excel velocemente, utilizzando le funzioni di Excel 365. Vogliamo selezionare un anno e avere, in un colpo solo, un calendario mensile che ci segnali i giorni per ogni mese in maniera dinamica.
Nel nostro esempio, abbiamo inserito anche una regola di formattazione condizionale per le giornate del week-end (sabato o domenica), che avranno uno sfondo arancione con font bianco. I giorni che sono feriali, saranno invece in corsivo. I valori di anno sono invece presi con un menu a tendina, in modo da aiutare l'inserimento.
Se poi ci fossero altre regole, ad esempio indicando festività o simili, queste potrebbero essere sicuramente implementate con una tabella di appoggio.
Se stai cercando il calendario Excel per il 2025, clicca qui!
Come creare un calendario mensile con Excel
Vediamo quindi qual è la formula che ci permette di creare un calendario mensile con Excel, inserendo solamente l'anno che ci interessa:
=LET(months;SEQUENZA(;12);
start;DATA(B2;1;1);
end;DATA.MESE(start;12);
seq;SEQUENZA(end-start;;start);
red;REDUCE("";months;LAMBDA(acc;v;STACK.ORIZ(acc;FILTRO(seq;MESE(seq)=v))));
final;SE.ERRORE(ESCLUDI(red;;1);"");
months_array;INCLUDI(final;1);
output_real;STACK.VERT(MAIUSC(TESTO(months_array;"mmmm"));final);
output_real)Vediamo i singoli passaggi:
- months racchiude tutti i mesi da 1 a 12, grazie alla funzione SEQUENZA, che sarà su diverse colonne
- start indica il primo giorno dell'anno definito, grazie alla funzione DATA. In B2 ci mettiamo il nostro anno
- end sposta di 12 mesi, con DATA.MESE, la data in start. Quindi il 01/01/2025 diventa 01/01/2026 e così via
- seq definisce la SEQUENZA di date dal primo dell'anno alla fine, da 01/01/2025 a 31/12/2025, per esempio
Ora inizia la parte complicata, perchè per il momento abbiamo solo i mesi, il primo giorno dell'anno, l'ultimo e tutte le singole date fra il primo e l'ultimo dell'anno.
Red viene creato da REDUCE, che praticamente fa questo: prenderemo tutti i nostri mesi, da 1 a 12 (months). Ci sarà poi un ciclo iterativo dove Excel, tramite FILTRO e MESE, ci restituirà tutti i valori per i singoli mesi. Quindi avremo le date di Gennaio, quelle di Febbraio, quelle di Marzo e così via (che sono i numeri 1,2,3 nel nostro esempio).
Dato che REDUCE si muove in maniera iterativa, vogliamo però mantenere in memoria e sul file i nostri risultati per il singolo mese. In questo caso, lavoriamo con STACK.ORIZ che praticamente crea uno stack con l'accumulatore (il risultato dell'iterazione precedente) e il risultato del FILTRO attuale.
Per capirci meglio: per Gennaio, il risultato sarà un'intera colonna di valori vuoti (il primo valore di accumulatore, "", in REDUCE) | colonna date Gennaio (ottenuti filtrando solamente le date con mese = 1).
Per Febbraio, avremo: intera colonna di valori vuoti | date Gennaio | date Febbraio, dato che ora il valore che consideriamo è 2, non più 1. 1 ha generato l'iterazione precedente, ora passiamo al successivo - e faremo così fino al valore 12.
Il risultato finale è simile a questo: avremo 13 colonne con i nostri dati e, per ognuna di esse, i dati in ordine. Qui è chiaro che la prima colonna non ci serva più, quindi la eliminiamo definendo final.
Final infatti sarà il risultato di red, togliendo però, con ESCLUDI, la prima colonna che troviamo. Se ci sono errori, come in questo caso perchè le date per mese sono variabili, vogliamo far vedere vuoto quindi usiamo anche SE.ERRORE. Final avrà quindi, esclusivamente, le date corrette per singolo mese - e, se i mesi hanno più giorni di quanto immaginato, apparirà un errore.
A questo punto, ho pensato a un modo per visualizzare comunque i nomi dei mesi in modo dinamico. Si può fare in tanti modi diversi, ma mi piaceva l'idea di tenere tutto compatto in una formula sola. Months_array prende, con INCLUDI, solamente il valore del primo del mese, per ogni mese. Questo è il valore che useremo per restituire poi il nome del mese, in maniera dinamica.
Output_real fa proprio questo, impilando prima i valori del primo giorno del mese di Months_array, per poi aggiungere Final, che ha tutte le nostre date corrette. Per migliorare la visualizzazione dell'intestazione, che sarebbe Months_array, utilizziamo la funzione MAIUSC che trasforma tutto in maiuscolo. In questo caso, rendiamo in maiuscolo il risultato della funzione TESTO, che ci restituisce solamente il nome del mese, a partire dal primo giorno del mese. MAIUSC ci serve solo perchè altrimenti le intestazioni sarebbero state "gennaio","febbraio" e così via.
A questo punto, diciamo a LET che vogliamo vedere Output_real et voilà, la nostra formula è completata!
Come creare un calendario mensile con Excel e LAMBDA
Possiamo riutilizzare la formula precedente per creare una LAMBDA che ci permetta di creare un calendario su Excel in un colpo solo.
La nostra formula, in questo caso, sarà:
=LAMBDA(anno;LET(months;SEQUENZA(;12);
start;DATA(anno;1;1);
end;DATA.MESE(start;12);
seq;SEQUENZA(end-start;;start);
red;REDUCE("";months;LAMBDA(acc;v;STACK.ORIZ(acc;FILTRO(seq;MESE(seq)=v))));
final;SE.ERRORE(ESCLUDI(red;;1);"");
months_array;INCLUDI(final;1);
output_real;STACK.VERT(MAIUSC(TESTO(months_array;"mmmm"));final);
output_real))
In sostanza, avendo creato una formula con vari step, ci basta tirar fuori la cella che ci interessa per l'anno - e questa diventa l'unica informazione che l'utente deve inserire.
Possiamo poi copiare questa formula > Formule > Definisci nome e inserirla nel blocco chiamato Riferito a. Possiamo scegliere il nome che preferiamo, in questo caso io ho inserito CALENDARIO_ANNUALE che diventerà quindi una vera e propria funzione personalizzata per il nostro file.
Per approfondire il tema delle funzioni LAMBDA su Excel, dai un'occhiata a questa guida!
Sono un formatore e consulente esperto nell’uso e nell’insegnamento di Microsoft Excel.
Negli ultimi 3 anni ho tenuto corsi presso realtà in multinazionali come Aruba, Bridor, IMI Orton, Primadonna e SISAL, oltre a PMI e startup di diverso genere.
Realizzo corsi di formazione Excel dedicati per aziende, supporto professionisti 1:1 a distanza con call mirate e collaboro con aziende offrendo servizi di consulenza quali creazione di business plan, dashboard di vendita e non solo.
Vuoi saperne di più? Prenota una call gratuita di 15′!