Calcolare una data di inizio della settimana utilizzando VBA in Microsoft Excel
In questo articolo, creeremo una funzione definita dall’utente (UDF) o una funzione personalizzata per trovare la prima data per una determinata settimana, considerando il lunedì come primo giorno della settimana. Creeremo una funzione personalizzata che restituirà la prima data della settimana dopo il numero di settimane specificato dall’anno, mese o data specificato.
In questo articolo, i dati grezzi sono costituiti da numero di settimana, giorno, mese e anno.
La funzione personalizzata avrà giorno, mese, anno e numero della settimana come parametri di input. In base a questi valori di input, la funzione restituirà il primo giorno della settimana.
La sintassi per la funzione personalizzata “WeekStartDate” è WeekStartDate (WeekNumber, Year, Month, Day)
Mese e giorno sono parametri opzionali.
Questa funzione assume il lunedì come primo giorno della settimana.
La funzione WeekStartDate restituisce il primo giorno della settimana dopo il numero di settimane specificato dalla data specificata dal parametro Day, Month e Year. Se il parametro Day non è specificato, restituirà il primo giorno della settimana dopo il numero di settimane specificato nel mese specificato dal parametro Month dell’anno specificato. Se entrambi i parametri Mese e Giorno non sono specificati, restituirà il primo giorno della settimana specificata dell’anno.
Spiegazione logica
Abbiamo creato la funzione personalizzata “WeekStartDate” per trovare il primo giorno della settimana. La logica utilizzata per questa funzione è che se il giorno della settimana della data specificata è inferiore a 4, la settimana corrente verrà considerata come prima settimana. Altrimenti, se il giorno della settimana della data specificata è maggiore di 4, la settimana successiva verrà considerata come prima settimana.
Spiegazione del codice
DateSerial (intYear, intMonth, intDay)
La funzione DateSerial viene utilizzata per ottenere la data dal valore del giorno, del mese e dell’anno.
Weekday (FromDate, vbMonday)
La funzione Giorno della settimana viene utilizzata per ottenere il giorno della settimana per la data, considerando il lunedì come primo giorno della settimana.
If WKDay> 4 Then WDays = (7 intWeek) – WKDay + 1 Else WDays = (7 (intWeek – 1)) – WKDay + 1 End If Above il codice viene utilizzato per trovare il numero di giorni da includere per trovare la prima data della settimana. Se il valore del giorno della settimana è inferiore a 4, la settimana corrente viene considerata come prima settimana. Questo è il motivo per cui abbiamo sottratto 1, ovvero
(intWeek – 1). 1 viene aggiunto poiché si desidera trovare il primo giorno della settimana.
Segui sotto per il codice
Option Explicit Function WeekStartDate(intWeek As Integer, intYear As Integer, Optional intMonth As Integer = 1, Optional intDay As Integer = 1) 'Declaring variables Dim FromDate As Date, lngAdd As Long Dim WKDay, WDays As Integer WDays = 0 'Checking that year should not have negative value If intYear < 1 Then WeekStartDate = "Year cann't have negative value" Exit Function End If 'Calculating the date FromDate = DateSerial(intYear, intMonth, intDay) 'Getting the week day of the specified date considering monday as first day WKDay = Weekday(FromDate, vbMonday) 'If value of week day is less than 4 then subtracting 1 from the week number If WKDay > 4 Then WDays = (7 * intWeek) - WKDay + 1 Else WDays = (7 * (intWeek - 1)) - WKDay + 1 End If 'Return the first day of the week WeekStartDate = FromDate + WDays End Function
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]