In questa guida vediamo come creare un calendario dinamico in Excel 365. Selezionando un anno, Excel genererà automaticamente i giorni dei dodici mesi, senza dover aggiornare manualmente ogni data. La formula completa richiede Microsoft 365 aggiornato o Excel 2024, perché utilizza funzioni dinamiche (dynamic array) non disponibili nelle versioni precedenti.

Nel nostro esempio, abbiamo inserito una regola di formattazione condizionale per evidenziare le giornate del week-end, quindi sabato e domenica, con uno sfondo arancione e il font bianco. L'anno viene invece selezionato tramite un menu a tendina, in modo da rendere più semplice l'inserimento.
Le festività non sono incluse nella versione attuale del file. Se volessimo evidenziarle, potremmo aggiungere una tabella di appoggio e utilizzare una seconda regola di formattazione condizionale.
Se invece vuoi scaricare un calendario già pronto, dai un'occhiata al calendario Excel 2027!
Come creare un calendario mensile con Excel

Vediamo quindi qual è la formula che ci permette di creare un calendario mensile con Excel. Il risultato sarà composto da dodici colonne, una per ogni mese, con i giorni disposti verticalmente. L'anno viene letto dalla cella B2: modificando quel valore, il calendario viene rigenerato automaticamente.
=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 rappresenta il primo giorno dell'anno successivo. La differenza tra end e start ci permette di determinare automaticamente il numero di giorni dell'anno, compresi gli anni bisestili
- seq genera tutte le date dal primo all'ultimo giorno dell'anno. Le date di Excel sono numeri progressivi, quindi possiamo utilizzare start come valore iniziale di SEQUENZA e il numero di giorni calcolato in precedenza come numero di righe
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, cioè il risultato dell'iterazione precedente, e il risultato del FILTRO attuale. I mesi non hanno tutti la stessa lunghezza: febbraio contiene 28 o 29 date, mentre gli altri ne contengono 30 o 31. Quando STACK.ORIZ affianca queste matrici, completa le posizioni mancanti con degli errori, che gestiremo nel passaggio successivo.
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 sarà il risultato di red, togliendo però, con ESCLUDI, la prima colonna vuota creata dall'accumulatore iniziale di REDUCE. Le matrici dei mesi hanno un numero diverso di righe e, quando vengono affiancate, le posizioni mancanti restituiscono un errore. Con SE.ERRORE le trasformiamo in celle vuote, mantenendo solamente le date corrette per ogni mese.
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!
FORMAZIONE EXCEL
Vuoi portare queste competenze nel tuo team?
Progetto percorsi di formazione Excel basati sui vostri obiettivi, sul livello dei partecipanti e sui casi che affrontate realmente in azienda.

Marco Filocamo · Microsoft Excel MVP
Hai invece un file o un processo specifico da migliorare? Scopri la consulenza Excel →
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à una vera e propria funzione personalizzata per il nostro file. Dopo aver definito il nome, possiamo richiamarla in qualsiasi cella libera scrivendo =CALENDARIO_ANNUALE(B2). L'unico argomento richiesto è l'anno da utilizzare per generare il calendario.
Conclusioni
Abbiamo visto come creare un calendario mensile dinamico in Excel che si aggiorna modificando una sola cella. La formula con LET ci permette di seguire tutti i passaggi, mentre LAMBDA rende la soluzione più semplice da riutilizzare. A seconda del tuo file, puoi adattare colori e regole di formattazione oppure aggiungere una tabella dedicata alle festività.
Per approfondire il tema delle funzioni LAMBDA su Excel, dai un'occhiata a questa guida!
