Excel immagazzina tutte le date come numeri interi e tutte le ore come numeri decimali. Questo sistema consente operazioni di somma, di sottrazione e di confronto fra date o ore così come tutti gli altri numeri.
Per ragioni di progettazione dell'architettura di Excel che gira sul nostro PC i nostri benefattori hanno pensato di impostare la gestione del tempo a partire dalla data 1 gennaio 1900 (1904 per la versione Excel sui Mac). Pertanto il numero 1 rappresenta la data 1/1/1900 12:00 se si sta utilizzando un Sistema Operativo Windows che adotta un sistema Data 1900.
Le Ore vengono gestite come numeri decimali compresi fra 0,0 e 0,99999, dove 0,0 rappresenta l'orario 00:00:00 e 0,99999 rappresenta l'orario 23:59:59 (dopo le 23:59:59 torna 00:00:00 e non 24:00:00 come ci aspetteremmo)
I numeri interi relativi alle date e i numeri decimali relativi alle ore possono essere combinati per ottenere numeri che hanno una parte intera e una parte decimale. Per esempio, il numero 32331,06 rappresenta la data e l'ora su un sistema Windows.
Per effettuare complessi calcoli su date e ore, e' possibile utilizzare le funzioni di date e ora contenute in Microsoft Excel.
Per questi motivi si ha che:
| con il numero | 0,25 | si ottiene la data e l'ora | 00/01/1900 6.00 |
| con il numero | 1 | si ottiene la data e l'ora | 01/01/1900 0.00 |
| con il numero | 500 | si ottiene la data e l'ora | 14/05/1901 0.00 |
| con il numero | 501 | si ottiene la data e l'ora | 15/05/1901 0.00 |
Non mi dilungo ulteriormente sull'approfondimento di questo argomento teorico che lascio ben volentieri ai più volenterosi. Per cui passo senza altro indugio alla parte pratica che mi è più congeniale.
Prima di passare ad esaminare alcune semplici operazioni che possiamo compiere con le date vediamo molto velocemente alcune formattazioni di cui potremmo disporre tramite il menù Formato / Celle... o il menù contestuale del tasto destro del mouse sulla cella o sulle celle da formattare che ci mostreranno questa finestra di dialogo.
Formato data
Possiamo applicarlo ad un qualsiasi numero positivo:
| con il numero | 1 | dopo formato cella si ha | 01/01/1900 |
| con il numero | 38216 | dopo formato cella si ha | 17/08/2004 |
Formato Personalizzato
con questo tipo di formattazione possiamo ottenere interessanti risultati. Per usare il formato personalizzato, se non ne troviamo uno che ci soddisfi, possiamo scrivere il nostro nella casella Tipo il formato che più ci aggrada come è mostrato nell'esempio sottostante.
| 30/04/2004 | con | gggg | venerdì |
| con | mmmm | aprile | |
| con | aaaa | 2004 |
Funzione Anno, Mese, Giorno
Nella tabella sottostante sono da notare le diverse sintassi a seconda che si usi: la data, un riferimento ad una cella, un numero seriale.
Prendiamo in esame
| =ANNO("12/04/04") | restituisce | 2004 |
| =MESE("03/12/04") | restituisce | 12 |
| =MESE(A1) | restituisce | il mese della data in "A1" |
| =MESE(65380) | restituisce | 12 |
| =GIORNO("27/04/04") | restituisce | 27 |
| =GIORNO.SETTIMANA("27/4/04") | restituisce | 3 (martedi) |
Tenendo conto di quanto detto finora, ci risulteranno meno misteriose alcune semplici operazioni che Excel ci permette di compiere.
Possiamo perciò tranquillamente compiere semplici (e meno semplici) operazioni sulle date facendo tuttavia attenzione ad interpretare e a dare anche la giusta formattazione alle celle che andremo a trattare.
Funzione Data
Da semplici numeri è possibile ottenere la data.
con la formula =DATA(2007;8;15) otterremo 15/08/2007
in C1 c'è 2007, in D1 c'è 11, in E1 c'è 28
useremo la funzione DATA in questo modo =DATA(C1;D1;E1) per ottenere 28/11/2007
oppure =DATA(C1+2;D1-4;E1+2) per ottenere 30/07/2009
e se aggiungiamo dei valori che portano a risultati superiori ai 30 o ai 31 giorni o ai 12 mesi? Excel aggiusta le date passando al mese successivoo all'anno successivo
in C1, D1 e E1 abbiamo gli stessi valori che vediamo sopra
scriviamo la formula: =DATA(C1;D1+4;E1) ed otteniamo 28/03/2008
scriviamo la formula: =DATA(C1;D1;E1+4) ed otteniamo 02/12/2007
Fine mese
Anche per trovare la fine del mese è sufficiente una semplice formula che faccia riferimento alla data in oggetto.
La funzione ha due argomenti: la data ed i mesi: con la data indichiamo la data da valutare e con mesi indichiamo di quale mese intendiamo sapere la fine
| la data | il risultato | la formula | |
| A | B | C | |
|---|---|---|---|
| 1 | 31/05/2002 | 31/05/2002 | =FINE.MESE(A1;0) |
| 2 | 30/04/2004 | 30/04/2004 | =FINE.MESE(A2;0) |
| 3 | 28/02/1999 | 28/02/1999 | =FINE.MESE(A3;0) |
| 4 | 29/02/2004 | 29/02/2004 | =FINE.MESE(A4;0) |
| 5 | 29/02/2004 | 29/02/2004 | =FINE.MESE(A5;0) |
| 6 | 29/08/2004 | 30/11/2004 | =FINE.MESE(A6;3) |
| 7 | 29/08/2004 | 30/06/2004 | =FINE.MESE(A7;-2) |
Ma possiamo calcolare la fine del mese anche aiutati da formule personalizzate.
In A1 abbiamo l'anno, in B1 il mese, in C1 scriviamo la formula =DATA(A1;B1+1;0)
| L'anno | il giorno | il risultato | la formula | |
| A | B | C | ||
| 1 | 2007 | 4 | 30/04/2007 | =DATA(A1;B1+1;0) |
| 2 | 2007 | 8 | 31/08/2007 | =DATA(A2;B2+1;0) |
| 3 | 2007 | 2 | 28/02/2007 | =DATA(A3;B3+1;0) |
| 4 | 2004 | 2 | 29/02/2004 | =DATA(A4;B4+1;0) |
Questo un altro metodo
| La data | il risultato | la formula | |
| A | B | C | |
|---|---|---|---|
| 1 | 11/05/2002 | 31/05/2002 | =DATA(ANNO(A1);MESE(A1)+1;0) |
| 2 | 05/04/2004 | 30/04/2004 | =DATA(ANNO(A2);MESE(A2)+1;0) |
| 3 | 08/02/1999 | 28/02/1999 | =DATA(ANNO(A3);MESE(A3)+1;0) |
| 4 | 05/02/2004 | 29/02/2004 | =DATA(ANNO(A4);MESE(A4)+1;0) |
L'età di una persona
Ho provato a cercare se, tra le funzioni di Excel ci fosse qualcosa che ci dicesse che l'età di una persona sia di X anni, Y mesi, Z giorni. Si potrebbero usare alcune funzioni di Excel ma occorrerebbero molte manovre e, soprattutto, molte celle di appoggio.
Per cui ho pensato bene di costruire una funzione ad hoc
Function Eta(Date1 As Date, Date2 As Date) As String
Dim Y As Integer
Dim M As Integer
Dim D As Integer
Dim Temp1 As Date
Temp1 = DateSerial(Year(Date2), Month(Date1), Day(Date1))
Y = Year(Date2) - Year(Date1) + (Temp1 > Date2)
M = Month(Date2) - Month(Date1) - (12 * (Temp1 > Date2))
D = Day(Date2) - Day(Date1)
If D < 0 Then
M = M - 1
D = Day(DateSerial(Year(Date2), Month(Date2), 0)) + D
End If
Eta = Y & " anni " & M & " mesi " & D & " giorni"
End Function
In A5 c'è la data di inizio (08/11/1981) ed in A6 la data finale (29/08/2007)
Questa funzione restituisce una stringa del genere:
25 anni 9 mesi 21 giorni
Possiamo richiamarla in due modi: dal codice VB e direttamente sul foglio di lavoro
Nel codice
Questo è uno dei modi con cui possiamo richiamare la formula:
Sub MiaEtaDiff()
Range("B6") = Eta(Range("A5"), Range("A6"))
MsgBox "fatto"
End Sub
Direttamente sul foglio di lavoro
Se non vogliamo scrivere direttamente la formula sul foglio di lavoro possiamo sceglere
ci facciamo aiutare da inserisci Funzione di Excel che ci mostra
questa finestra dalla quale possiamo scegliere la nostra funzione personalizzata
dall'elenco scegliamo la nostra funzione, nel nostro caso Eta, e ci troviamo con questa finestra
in questa finestra possiamo possiamo scegliere la cella con la data di partenza e quella con la data finale e
alla fine ci ritroviamo col risultato sperato nella cella dove abbiamo inserito la formula che possiamo vedere nella barra della formula
Per il momento penso proprio che possiamo prenderci una breve pausa. Perciò possiamo sospendere le nostre disquisizioni augurandovi buon lavoro e buon apprendimento.