Вычислить дату начала недели с помощью VBA в Microsoft Excel
В этой статье мы создадим определяемую пользователем функцию (UDF) или настраиваемую функцию, чтобы найти первую дату для любой данной недели, считая понедельник первым днем недели. Мы создадим настраиваемую функцию, которая будет возвращать первую дату недели после указанного числа недель из данного года, месяца или числа.
В этой статье необработанные данные состоят из номера недели, дня, месяца и года.
Пользовательская функция будет иметь в качестве входных параметров день, месяц, год и номер недели. На основе этих входных значений функция вернет первый день недели.
Синтаксис пользовательской функции WeekStartDate: WeekStartDate (WeekNumber, Year, Month, Day)
Месяц и День — необязательные параметры.
Эта функция считает понедельник первым днем недели.
Функция WeekStartDate возвращает первый день недели после указанного количества недель с даты, указанной в параметрах Day, Month и Year. Если параметр Day не указан, он вернет первый день недели после указанного числа недель в месяце, указанном параметром Месяц указанного года. Если оба параметра «Месяц» и «День» не указаны, будет возвращен первый день указанной недели года.
Логическое объяснение
Мы создали пользовательскую функцию «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]