计算在Excel中使用VBA一周开始日期
在本文中,我们将创建一个用户定义函数(UDF)或自定义函数来查找任何给定星期的第一个日期,并将星期一作为一周的第一天。我们将创建一个自定义函数,该函数将返回给定年份,月份或日期中指定周数之后的一周的第一天。
在本文中,原始数据包括星期数,日,月和年。
自定义功能将以日,月,年和周的数字作为输入参数。根据这些输入值,函数将返回一周的第一天。
自定义函数“ WeekStartDate”的语法是WeekStartDate(WeekNumber,Year,Month,Day)
月和日是可选参数。
此功能假定星期一为一周的第一天。
WeekStartDate函数返回从Day,Month和Year参数指定的日期起指定星期数之后的一周的第一天。如果未指定Day参数,则它将返回由指定年份的Month参数指定的月份中指定的星期数之后的一周的第一天。如果未同时指定Month和Day参数,则它将返回一年中指定星期的第一天。
逻辑解释
我们创建了“ WeekStartDate”自定义函数来查找一周的第一天。用于此功能的逻辑是,如果给定日期的星期几小于4,则将当前星期视为第一周。否则,如果给定日期的工作日大于4,则下周将被视为第一周。
代码说明
DateSerial(intYear,intMonth,intDay)
DateSerial函数用于从日期,月份和年份值获取日期。
工作日(FromDate,vbMonday)
Weekday函数用于获取日期的星期几,将星期一视为一周的第一天。
如果WKDay> 4,则WDays =(7 intWeek)-WKDay + 1其他WDays =(7(intWeek-1))-WKDay + 1 End如果上述代码用于查找要包括的天数以查找第一个日期一周中的。如果星期几的值小于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]