Nei giorni feriali in Excel VBA
Di seguito vedremo un programma in Excel VBA che calcola il numero di giorni lavorativi tra due date.
Nei giorni feriali sono: Lunedi, Martedì, Mercoledì, Giovedi e Venerdì.
Situazione:
Nota: Le date sono in formato USA. Mesi prima, Giorni Seconda. Questo tipo di formato dipende dalle vostre finestre Impostazioni internazionali.
-
In primo luogo, si dichiara cinque variabili. date1 di tipo Data, date2 di tipo Data, dateToCheck di tipo Data, daysBetween di tipo Integer, nei giorni feriali di tipo Integer e di tipo Integer.
Dim date1 As Date, date2 As Date, dateToCheck As Date Dim daysBetween As Integer, weekdays As Integer, i As Integer
-
inizializziamo quattro variabili. Usiamo la funzione DateDiff per inizializzare la daysBetween variabile. Questa funzione ha tre argomenti.
Riempiamo in “D” per il primo argomento in quanto vogliamo che il numero di giorni tra data1 e data2.
weekdays = 0 date1 = Range("B2") date2 = Range("B3") daysBetween = DateDiff("d", date1, date2)
-
Abbiamo bisogno di controllare per ogni data tra data1 e data2 (compresi data1 e data2) se la data è un giorno della settimana o meno. Se sì, si incrementano i giorni feriali dal 1. Useremo un ciclo For Next.
For i = 0 To daysBetween
-
Usiamo la funzione DateAdd per ottenere ogni data abbiamo bisogno di controllare. Questa funzione ha tre argomenti. Riempiamo in “D” per il primo argomento da quando vogliamo aggiungere giorni, i per il secondo argomento, e date1 per il terzo argomento in quanto vogliamo aggiungere i giorni a date1. In questo modo Excel VBA può controllare ogni data tra data1 e data2 iniziando con date1. Aggiungere la seguente riga di codice:
dateToCheck = DateAdd("d", i, date1)
Esempio: per i = 3, assegni Excel VBA data1 + 3 giorni.
-
Successivamente, utilizzare la funzione Weekday (costruire in funzione) per verificare se dateToCheck è un giorno della settimana o meno. La funzione Weekday restituisce 1 per Domenica e 7 per un Sabato. Pertanto, viene incrementato solo i giorni feriali variabili se Weekday (dateToCheck) non è uguale a 1 e non uguale a 7 (<> strumenti non uguale a). Le seguenti righe di codice ottenere il lavoro fatto.
If (Weekday(dateToCheck) <> 1 And Weekday(dateToCheck) <> 7) Then weekdays = weekdays + 1 End If
-
Non dimenticare di chiudere il ciclo.
Next i
-
Infine, visualizzare il numero di giorni con un MsgBox. Usiamo l’operatore & per concatenare (join) due stringhe. Anche se nei giorni feriali non è una stringa che lavora qui.
MsgBox weekdays & " weekdays between these two dates"
-
Posizionare la macro in un pulsante di comando e testarlo.
Risultato: