Excel Calcolo Giorni Tra Due Date

Calcolatore Giorni tra Due Date in Excel

Giorni Total:
0
Giorni Lavorativi:
0
Anni:
0
Mesi:
0
Formula Excel:

Guida Completa: Come Calcolare i Giorni tra Due Date in Excel

Il calcolo dei giorni tra due date è un’operazione fondamentale in Excel, utilizzata in contabilità, gestione progetti, risorse umane e analisi finanziaria. Questa guida approfondita ti mostrerà tutti i metodi disponibili, dalle funzioni di base alle tecniche avanzate, con esempi pratici e consigli per evitare errori comuni.

1. Funzioni Base per il Calcolo dei Giorni

1.1 Funzione GIORNI (DAYS)

La funzione più semplice per calcolare la differenza tra due date:

=GIORNI(data_fine; data_inizio)

Esempio: =GIORNI("15/03/2023"; "01/01/2023") restituisce 73 giorni.

  • Vantaggi: Semplice e diretta
  • Limitazioni: Non considera anni bisestili in modo specifico (ma li gestisce correttamente)
  • Compatibilità: Excel 2013 e versioni successive

1.2 Operatore di Sottrazione

Puoi semplicemente sottrarre due date:

=data_fine - data_inizio

Esempio: ="15/03/2023" - "01/01/2023"

Nota: Excel memorizza le date come numeri seriali (1 = 1/1/1900), quindi la sottrazione funziona perfettamente.

2. Funzioni Avanzate per Calcoli Specifici

2.1 GIORNI.360 (DAYS360)

Calcola i giorni basandosi su un anno di 360 giorni (12 mesi da 30 giorni), usato in contabilità:

=GIORNI.360(data_inizio; data_fine; [metodo])

Parametri:

  • metodo: FALSE (Europa) o TRUE (USA). Default FALSE.

Metodo Comportamento Esempio
FALSE (Europa) Se il giorno di inizio è 31, viene cambiato in 30 =GIORNI.360(“31/01/2023″;”15/03/2023”;FALSE) → 43
TRUE (USA) Se il giorno di inizio è 31, viene cambiato in 30. Se la data di fine è 31, e la data di inizio è <30, la data di fine viene cambiata in 1 del mese successivo =GIORNI.360(“31/01/2023″;”31/03/2023”;TRUE) → 59

2.2 FRAZIONE.ANNO (YEARFRAC)

Calcola la frazione di anno tra due date, utile per interessi e ammortamenti:

=FRAZIONE.ANNO(data_inizio; data_fine; [base])

Parametri base:

  • 0 o omesso: US (NASD) 30/360
  • 1: Attuale/attuale
  • 2: Attuale/360
  • 3: Attuale/365
  • 4: Europeo 30/360

2.3 DATA.DIFF (DATEDIF)

Funzione “nascosta” per calcoli complessi (anni, mesi, giorni):

=DATA.DIFF(data_inizio; data_fine; unità)

Unità disponibili:

  • “Y”: Anni completi
  • “M”: Mesi completi
  • “D”: Giorni
  • “MD”: Differenza giorni (ignora mesi e anni)
  • “YM”: Differenza mesi (ignora giorni e anni)
  • “YD”: Differenza giorni (come se fosse lo stesso anno)

Esempi:

  • =DATA.DIFF("01/01/2020";"15/03/2023";"Y") → 3 (anni completi)
  • =DATA.DIFF("01/01/2020";"15/03/2023";"YM") → 2 (mesi oltre gli anni completi)
  • =DATA.DIFF("01/01/2020";"15/03/2023";"MD") → 14 (giorni oltre mesi e anni completi)

3. Calcolo dei Giorni Lavorativi

3.1 GIORNI.LAVORATIVI (NETWORKDAYS)

Calcola i giorni lavorativi escludendo sabato, domenica e festività:

=GIORNI.LAVORATIVI(data_inizio; data_fine; [festività])

Esempio: =GIORNI.LAVORATIVI("01/01/2023";"31/01/2023";{"06/01/2023"}) → 21 giorni lavorativi (esclude Epifania)

3.2 GIORNI.LAVORATIVI.INTL (NETWORKDAYS.INTL)

Versione flessibile che permette di definire quali giorni sono weekend:

=GIORNI.LAVORATIVI.INTL(data_inizio; data_fine; [fine_settimana]; [festività])

Parametri fine_settimana:

  • 1: Sabato e Domenica (default)
  • 2: Domenica e Lunedì
  • 3: Lunedì e Martedì
  • 11: Solo Domenica
  • 12: Solo Sabato
  • 13: Solo Venerdì
  • 14: Solo Venerdì e Sabato
  • 15: Solo Venerdì e Domenica
  • 16: Solo Sabato e Domenica
  • 17: Solo Sabato

Consiglio Professionale: Per i paesi musulmani dove il weekend è venerdì-sabato, usa =GIORNI.LAVORATIVI.INTL(data_inizio; data_fine; 14)

4. Gestione Errori Comuni

  1. #VALORE!: Verifica che entrambi gli argomenti siano date valide. Usa =DATAVALORE("01/01/2023") per convertire stringhe in date.
  2. #NUM!: La data di fine è precedente alla data di inizio. Usa =ASS(data_fine > data_inizio) per verificare.
  3. Risultati inattesi con GIORNI.360: Ricorda che questa funzione usa sempre mesi di 30 giorni, indipendentemente dalla realtà.
  4. Festività non riconosciute: In GIORNI.LAVORATIVI, assicurati che le festività siano in un intervallo di celle o come costante matrice {"01/01/2023";"06/01/2023"}

5. Tecniche Avanzate

5.1 Calcolo Giorni tra Date in Anni Diversi con Anni Bisestili

Per calcoli precisi che considerano gli anni bisestili:

=data_fine - data_inizio - CONTA.SE(INT(data_inizio:data_fine); INT(data_inizio:data_fine)) + 1

Oppure usa:

=SOMMAPRODOTTO(--(ANNO(SEQUENZA(data_fine-data_inizio;1;;data_inizio))=ANNO(data_inizio));1)

5.2 Creare un Calendario Dinamico

Combinando diverse funzioni puoi creare un calendario che evidenzia i giorni lavorativi:

=SE(ERRORE(GIORNO.SETTIMANA(A1;2));"";SE(O(GIORNO.SETTIMANA(A1;2)>5;CONTA.NUMERO(CERCA(A1;festività)));"Festivo";"Lavorativo"))

5.3 Calcolo Ore/Lavoro tra Due Date

Per calcolare le ore lavorative (es. 8 ore/giorno):

=GIORNI.LAVORATIVI(data_inizio; data_fine) * 8

Per includere orari specifici:

=SE(data_fine

        

6. Confronto tra Metodi di Calcolo

Metodo Precisione Velocità Uso Tipico Gestione Anni Bisestili Gestione Festività
Operatore - ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Calcoli generici No
GIORNI ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Calcoli generici No
GIORNI.360 ⭐⭐ ⭐⭐⭐⭐ Contabilità No (360 giorni) No
FRAZIONE.ANNO ⭐⭐⭐⭐ ⭐⭐⭐ Finanza, interessi Dipende dalla base No
DATA.DIFF ⭐⭐⭐⭐ ⭐⭐⭐⭐ Età, scadenze No
GIORNI.LAVORATIVI ⭐⭐⭐⭐ ⭐⭐⭐ Progetti, HR

7. Integrazione con Power Query

Per analisi avanzate su grandi dataset:

  1. Importa i tuoi dati in Power Query
  2. Aggiungi una colonna personalizzata con formula:
    = Duration.Days([Data Fine] - [Data Inizio]) + 1
  3. Per giorni lavorativi, usa:
    (dataFine, dataInizio) =>
    let
        DateList = List.Dates(dataInizio, Duration.Days(dataFine - dataInizio) + 1, #duration(1,0,0,0)),
        Weekdays = List.Select(DateList, each Date.DayOfWeek(_, Day.Monday) < 5),
        Holidays = {...}, // Elenco festività
        WorkingDays = List.Except(Weekdays, Holidays)
    in
        List.Count(WorkingDays)

8. Automazione con VBA

Per soluzioni personalizzate, puoi creare una funzione VBA:

Function GiorniLavorativiPersonalizzati(inizio As Date, fine As Date, Optional festivi As Variant) As Long
    Dim giorni As Long
    Dim dataCorrente As Date
    Dim i As Long

    giorni = 0
    dataCorrente = inizio

    Do While dataCorrente <= fine
        Select Case Weekday(dataCorrente, vbMonday)
            Case 1 To 5 'Lunedì a Venerdì
                'Controlla festività
                If Not IsMissing(festivi) Then
                    For i = LBound(festivi) To UBound(festivi)
                        If DateValue(festivi(i)) = dataCorrente Then GoTo NextDay
                    Next i
                End If
                giorni = giorni + 1
        End Select
NextDay:
        dataCorrente = dataCorrente + 1
    Loop

    GiorniLavorativiPersonalizzati = giorni
End Function

Chiamala in Excel con: =GiorniLavorativiPersonalizzati(A1;B1;{"01/01/2023";"06/01/2023"})

9. Fonti Ufficiali e Risorse

Per approfondimenti autorevoli:

10. Domande Frequenti

10.1 Come gestire i fusi orari nel calcolo delle date?

Excel non gestisce nativamente i fusi orari. Soluzioni:

  • Converti tutte le date in UTC prima del calcolo
  • Usa =data + (fuso_orario/24) per aggiustare
  • Per progetti internazionali, standardizza su un fuso orario di riferimento

10.2 Posso calcolare i giorni tra due date includendo solo alcuni giorni della settimana?

Sì, con una formula matrice:

{=SOMPRODOTTO(--(GIORNO.SETTIMANA(SEQUENZA(data_fine-data_inizio+1;1;;data_inizio);2)=giorni_deseiderati))}

Dove giorni_deseiderati è un array come {2;3;4} per martedì, mercoledì, giovedì.

10.3 Come contare i giorni di un mese specifico tra due date?

Usa:

=SOMPRODOTTO(--(MESE(SEQUENZA(data_fine-data_inizio+1;1;;data_inizio))=mese_deseiderato))

10.4 È possibile calcolare i giorni trascorsi da oggi automaticamente?

Sì, con =OGGI()-data_inizio. Per aggiornamento automatico, premi F9 o imposta il calcolo automatico in Formule > Opzioni di calcolo.

10.5 Come gestire le date prima del 1900?

Excel per Windows usa il sistema di date 1900 (1=01/01/1900), mentre Excel per Mac prima del 2011 usava il sistema 1904 (0=01/01/1904). Per date precedenti:

  • Usa testo e converti manualmente
  • Crea una tabella di riferimento
  • Considera strumenti esterni per dati storici

Leave a Reply

Your email address will not be published. Required fields are marked *