В этой статье мы создадим определяемую пользователем функцию (UDF) или настраиваемую функцию, чтобы найти первую дату для любой данной недели, считая понедельник первым днем ​​недели. Мы создадим настраиваемую функцию, которая будет возвращать первую дату недели после указанного числа недель из данного года, месяца или числа.

В этой статье необработанные данные состоят из номера недели, дня, месяца и года.

Пользовательская функция будет иметь в качестве входных параметров день, месяц, год и номер недели. На основе этих входных значений функция вернет первый день недели.

ArrowRawData

Синтаксис пользовательской функции WeekStartDate: WeekStartDate (WeekNumber, Year, Month, Day)

Месяц и День — необязательные параметры.

Эта функция считает понедельник первым днем ​​недели.

Функция WeekStartDate возвращает первый день недели после указанного количества недель с даты, указанной в параметрах Day, Month и Year. Если параметр Day не указан, он вернет первый день недели после указанного числа недель в месяце, указанном параметром Месяц указанного года. Если оба параметра «Месяц» и «День» не указаны, будет возвращен первый день указанной недели года.

ArrowOutput

Логическое объяснение

Мы создали пользовательскую функцию «WeekStartDate», чтобы найти первый день недели. Логика, используемая для этой функции, заключается в том, что если день недели данной даты меньше 4, то текущая неделя будет считаться первой неделей. В противном случае, если день недели данной даты больше 4, то следующая неделя будет считаться первой неделей.

Объяснение кода

DateSerial (intYear, intMonth, intDay)

Функция DateSerial используется для получения даты из значения дня, месяца и года.

День недели (FromDate, vbMonday)

Функция дня недели используется для получения дня недели для даты, считая понедельник первым днем ​​недели.

Если WKDay> 4, то WDays = (7 intWeek) — WKDay + 1 Else WDays = (7 (intWeek — 1)) — WKDay + 1 End If Указанный выше код используется для определения количества дней, которые должны быть включены, чтобы найти первую дату недели. Если значение дня недели меньше 4, то текущая неделя считается первой неделей. Поэтому мы вычли 1, т.е.

(intWeek — 1). 1 добавляется, поскольку мы хотим найти первый день недели.

Пожалуйста, введите код ниже

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

Если вам понравился этот блог, поделитесь им с друзьями на Facebook и Facebook.

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]