En este artículo, crearemos una función definida por el usuario (UDF) o función personalizada para encontrar la primera fecha de una semana determinada, considerando el lunes como el primer día de la semana. Crearemos una función personalizada que devolverá la primera fecha de la semana después del número especificado de semanas del año, mes o fecha dado.

En este artículo, los datos brutos consisten en número de semana, día, mes y año.

La función personalizada tendrá el número de día, mes, año y semana como parámetros de entrada. Según estos valores de entrada, la función devolverá el primer día de la semana.

ArrowRawData

La sintaxis de la función personalizada “WeekStartDate” es WeekStartDate (WeekNumber, Year, Month, Day)

El mes y el día son parámetros opcionales.

Esta función asume el lunes como primer día de la semana.

La función WeekStartDate devuelve el primer día de la semana después del número especificado de semanas a partir de la fecha especificada por el parámetro Día, Mes y Año. Si no se especifica el parámetro Día, devolverá el primer día de la semana después del número de semanas especificado en el mes especificado por el parámetro Mes del año especificado. Si no se especifican los parámetros de mes y día, devolverá el primer día de la semana especificada del año.

ArrowOutput

Explicación lógica

Hemos creado la función personalizada «WeekStartDate» para encontrar el primer día de la semana. La lógica utilizada para esta función es que si el día de la semana de la fecha dada es menor que 4, entonces la semana actual se considerará como la primera semana. De lo contrario, si el día de la semana de la fecha indicada es mayor que 4, la próxima semana se considerará como la primera semana.

Explicación del código

DateSerial (intYear, intMonth, intDay)

La función DateSerial se utiliza para obtener la fecha del valor del día, mes y año.

Día de la semana (FromDate, vbMonday)

La función de día de la semana se utiliza para obtener el día de la semana para la fecha, considerando el lunes como el primer día de la semana.

If WKDay> 4 Then WDays = (7 intWeek) – WKDay + 1 Else WDays = (7 (intWeek – 1)) – WKDay + 1 End If Above código se utiliza para encontrar el número de días que se incluirán para encontrar la primera fecha de la semana. Si el valor del día de la semana es inferior a 4, la semana actual se considera la primera semana. Es por eso que hemos restado 1 es decir

(semana int – 1). Se agrega 1 ya que queremos encontrar el primer día de la semana.

Siga a continuación el código

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

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]