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.

ArrowRawData

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.

ArrowOutput

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]