Python in Excel può essere una valida alternativa per automatizzare numerosi calcoli e processi, come ad esempio la creazione di un calendario da zero.

Se non hai mai visto Python in Excel, devi sapere che il codice Python va inserito seguendo questa sequenza:
- Inizi a scrivere la formula =PY
- Una volta che ti appare =PY, devi cliccare su TAB per poter scrivere codice
- Ultimata la scrittura del codice, devi cliccare su CTRL+ENTER, non solo ENTER
Fatta questa premessa, vediamo ora qual è la formula che ci serve per creare un calendario. Avremo un array calendario, in Excel, che prevede:
- Giorno
- Anno
- Mese
- Mese in formato testuale
- Giorno
- Giorno della settimana
Tutto ciò, riusciremo a farlo in un colpo solo, grazie alla potenza di Python.

Selezioniamo l'anno 2026 per fare un esempio e per rendere il calendario dinamico.
La formula per creare il calendario con Python in Excel

Il codice necessario per creare il calendario con Python in Excel è la seguente, anche se chiaramente esistono numerose alternative per arrivare a questo risultato:
import pandas as pd
anno = xl("D2")
date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")
# Utilizza i nomi locali per mesi e giorni
mesi_it = {
1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
}
giorni_it = {
0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
4:"Venerdì", 5:"Sabato", 6:"Domenica"
}
# Crea il DataFrame calendario
calendario = pd.DataFrame({
"Data": date,
"Anno": date.year,
"Mese": date.month,
"Mese_Nome": [mesi_it[m] for m in date.month],
"Giorno": date.day,
"Giorno_Settimana": [giorni_it[d] for d in date.dayofweek],
})
# Restituisce il calendario
calendario
Vediamola nel dettaglio, separandola per blocchi, iniziando dall'intervallo di date
import pandas as pd
anno = xl("D2")
date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")
Qui stiamo dichiarando che utilizzeremo pandas, fra le librerie installate in Excel. L'anno sarà preso dalla cella D2 del nostro foglio, essendo una formula dinamica. Avremmo comunque potuto inserire anno=2035 e il risultato sarebbe stato comunque corretto.
L'ultimo punto, con date, è il più ostico. In sostanza stiamo creando un range di date in pandas utilizzando date_range con un inizio pari a anno-01-01 e finale anno-12-31, seguendo la notazione americana anno-mese-giorno. La f"{anno indica che stiamo usando le F-string, che permettono di utilizzare un parametro dinamico, un po' come se fossero dei nomi definiti su Excel. Facendo f"{anno}-01-01" vuol dire che 01-01 sarà fisso, ma cambierà l'anno, se lo modifichiamo in D2.
La frequenza è definita come D, cioè giornaliera (D = Day), ma alternative sarebbero comunque possibili, se richiesto.
# Utilizza i nomi locali per mesi e giorni
mesi_it = {
1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
}
giorni_it = {
0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
4:"Venerdì", 5:"Sabato", 6:"Domenica"
}
Qui ho trovato uno scoglio in Python in Excel, dato che non sembra riconoscere le impostazioni locali per i nomi dei mesi. Creiamo quindi un mapping che faccia corrispondere ai singoli mesi i nomi italiani, così come ai giorni della settimana i relativi nomi italiani. Come noti, i giorni partono da 0 perchè la numerazione predefinita, in Python, comincia proprio da zero.
# Crea il DataFrame calendario
calendario = pd.DataFrame({
"Data": date,
"Anno": date.year,
"Mese": date.month,
"Mese_Nome": [mesi_it[m] for m in date.month],
"Giorno": date.day,
"Giorno_Settimana": [giorni_it[d] for d in date.dayofweek],
})
Dichiariamo che vogliamo creare un DataFrame, simile a una tabella Excel con una struttura di intestazioni di colonna e righe dedicate. In particolare, avremo:
- La colonna Data, ottenuta dalla date creata in precedenza
- La colonna Anno, che prende l'anno della date con date.year
- La colonna Mese, che recupera il mese di riferimento con date.month
- La colonna Mese_Nome, che fa un passaggio in più. Stiamo dicendo che per ogni mese che troviamo in date.month, vogliamo restituire il nome corrispondente italiano che abbiamo creato prima. La m è la nostra variabile temporanea, poteva essere x,y,z, non fa differenza, ma va tenuta coerente perchè recupera il mapping - se trova 1 = Gennaio, 2 = Febbraio e così via
- La colonna Giorno, che estrae il giorno dalla data con date.day
- La colonna Giorno_Settimana, che fa un operazione simile a mese_nome, recuperando il nome del giorno della settimana dalla data in date
Come noti, varie operazioni sono simili a quelle che faresti in Excel con =ANNO, =MESE, =GIORNO, =GIORNO.SETTIMANA, =SEQUENZA e così via. L'unico tema che viene sempre escluso in questi casi è la settimana, perchè crea delle complicazioni spesso fuorvianti, dovute anche al calcolo in diversi paesi.
# Restituisce il calendario
calendario
L'ultimo punto è quello della visualizzazione del nostro nuovo DataFrame. Scriviamo calendario e vedremo il nostro nuovo calendario!

Arrivati a questo punto, magari rimaniamo un po' straniti perchè non riusciamo a visualizzare il nostro calendario. Il tema è che al momento stiamo vedendo il DataFrame, che è un oggetto di Python, mentre noi vogliamo visualizzare i dati in Excel. Dovrai quindi cliccare accanto a PY e selezionare Valore di Excel.

A questo punto, vedrai il nostro calendario con tutte le informazioni inserite in precedenza! Il risultato sarà un array che potrai utilizzare come preferisci - avendolo creato in C4, ti basterà fare =C4# per poi selezionare le singole parti che ti interessano e, se vuoi, caricarlo in Power Query.
Alternativa per creare il calendario in Python in Excel
Un approccio alternativo e più compatto per creare il calendario in Python in Excel potrebbe essere questo:
import pandas as pd
anno = int(xl("D2"))
date = pd.date_range(start=f"{anno}-01-01", end=f"{anno}-12-31", freq="D")
mesi_it = {
1:"Gennaio", 2:"Febbraio", 3:"Marzo", 4:"Aprile", 5:"Maggio", 6:"Giugno",
7:"Luglio", 8:"Agosto", 9:"Settembre", 10:"Ottobre", 11:"Novembre", 12:"Dicembre"
}
giorni_it = {
0:"Lunedì", 1:"Martedì", 2:"Mercoledì", 3:"Giovedì",
4:"Venerdì", 5:"Sabato", 6:"Domenica"
}
calendario = pd.DataFrame({"Data": date})
# "Data" è una Series, si usa .dt
calendario["Anno"] = calendario["Data"].dt.year
calendario["Mese"] = calendario["Data"].dt.month
calendario["Mese_Nome"] = calendario["Mese"].map(mesi_it)
calendario["Giorno"] = calendario["Data"].dt.day
calendario["Giorno_Settimana"] = calendario["Data"].dt.dayofweek.map(giorni_it)
calendario
In questo caso, le modifiche sono dalla seconda parte in poi, dove calendario viene creato come una serie - abbiamo quindi una colonna chiamata Data con tutte le nostre date create in precedenza.
La differenza è per i calcoli successivi dove, come vedi, c'è già un riferimento del tipo NomeDataFrame["NomeColonna"] = NomeDataFrame["Data"].Calcolo. Questo succede perchè ora abbiamo già un DataFrame chiamato calendario e, da questo, prenderemo i singoli valori di data per poi lavorarci, similarmente a quanto abbiamo fatto prima. La dicitura dt ci permette di accedere agli attributi delle singole date e, in generale, il codice è più approfondito. In alcune sezioni, però, è decisamente più comprensibile:
calendario["Mese_Nome"] = calendario["Mese"].map(mesi_it)
Con map possiamo trasformare rapidamente i valori dei singoli mesi utilizzando la nostra mappatura precedente e, nel caso delle settimane, dt.day.ofweek.map ci indica che stiamo prendendo il giorno della settimana desiderato.
In linea di massima i risultati sono equivalenti, ma è interessante vedere quali siano le alternative a nostra disposizione!
Conclusione
Abbiamo visto due modi diversi per creare un calendario in Excel utilizzando Python e pandas - non ti resta che fare qualche test e, se vuoi, scaricare il file!
Sono un formatore e consulente esperto nell’uso e nell’insegnamento di Microsoft Excel. Microsoft MVP in Excel dal 2024.
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′!



































