Alcune considerazioni sulle date

Ultima modifica: 28-05-2016

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.

 

Formattazione delle date

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

 

Le Funzioni di Excel

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.