È tempo di calendari

Creato il 06 novembre 2011 da Tanks @tanks
Si avvicina dicembre e, come tutti gli anni, ho l'impulso inarrestabile di preparare un calendario personalizzato. Lo metterò da parte a metà gennaio, al più tardi, ma va bene così.
Quest'anno però ho il fermo proposito di fare le cose per bene. Niente di meglio allora che partire da un "generatore automatico di calendari mensili".
Armiamoci di OpenOffice Calc (o Excel, fa lo stesso) e prepariamoci a giocare un po' di formule e un po' di formattazione delle celle.
Nella cella in alto (C4) ho scritto: novembre 2011, poi ho formattato la cella come: mmmm aaaa.
Cosa succede? "mmmm" significa: nome del mese per esteso (quindi: novembre). Se avessi scelto "mmm", avrei avuto il nome del mese abbreviato (nov); con "mm", infine, avrei avuto il mese in formato numerico (11).
La formattazione è più semplice per l'anno: aaaa --> 2011, aa --> 11.
A questo punto di tratta di scoprire il primo giorno del mese, lasciando in bianco le celle precedenti e incrementando di uno i giorni successivi. Qui si gioca di formule:
nella prima cella: =SE(GIORNO.SETTIMANA(C4;2)=1;C4;"")
Tradotto in umano significa: se il giorno della settimana della data in C4 è lunedì, allora copia la data qui, altrimenti lascia la cella vuota.
Per visualizzare solo il giorno (1) e non l'intera data (1/11/2011) si va di formattazione anche qui: gg invece di gg/mm/aa, ed è fatta.
Nella cella successiva la cosa è un po' più complicata, ma solo di poco:
 =SE(C6="";SE(GIORNO.SETTIMANA(C4;2)=2;C4;"");C6+1)
se la cella precedente è vuota, allora ripeto il ragionamento (se la data della cella C4 è un martedì, allora scrivo 1, altrimenti lascio la cela vuota); se la cella precedente non è vuota, allora aggiungo 1 e via.
La solita formattazione (gg) fa il resto.
Si continua così fino a che si arriva alle ultime due righe, dove occorre scoprire l'ultimo giorno del mese.
Il ragionamento è semplice: se il calcolo mi dà il primo del mese successivo, allora la cella va lasciata vuota, e così anche se la cella precedente è già vuota. Altrimenti: cella precedente più 1:=SE(O(GIORNO(C10+1)=1;C10="");"";C10+1)
Fatto! Se però volete risparmiarvi la fatica, potete scaricare il file da qui.
Buona domenica.