[英]vba convert week number (and year) to date?
I have a week number in Cell C13 and a year in Cell C14. 我在Cell C13中有一个星期编号 ,在Cell C14中有一年 。
I am using the below formula to convert this into the Thursday of that week number's date: 我使用以下公式将其转换为该周数的星期四 :
=DATE(C14,1,-6)-WEEKDAY(DATE(C14,1,3))+C13*7
How could i do the same thing using VBA? 我怎么能用VBA做同样的事情?
For a specific year , you can do it like this : 对于特定年份 ,您可以这样做:
DateAdd("ww", WeekNumber - 1, DateSerial(2017, 1, 5))
And to test it : 并测试它:
Debug.Print Format(DateAdd("ww", WeekNumber - 1, DateSerial(YearNumber, 1, 5)), "ddd d MMM yy")
If others are looking into this and don't want a Thursday or don't work on 2017 : 如果其他人正在研究这个并且不想要星期四或2017年不工作 :
change the 5 to fit your need! 改变5以满足您的需求!
Or use the below function GetDayFromWeekNumber
或者使用以下函数GetDayFromWeekNumber
Code to test it : 测试代码:
Sub test()
Debug.Print Format(GetDayFromWeekNumber(2017, 1, 4), "ddd d MMM yyyy")
End Sub
And the generic function GetDayFromWeekNumber
: 通用函数GetDayFromWeekNumber
:
Public Function GetDayFromWeekNumber(InYear As Integer, _
WeekNumber As Integer, _
Optional DayInWeek1Monday7Sunday As Integer = 1) As Date
Dim i As Integer: i = 1
If DayInWeek1Monday7Sunday < 1 Or DayInWeek1Monday7Sunday > 7 Then
MsgBox "Please input between 1 and 7 for the argument :" & vbCrLf & _
"DayInWeek1Monday7Sunday!", vbOKOnly + vbCritical
'Function will return 30/12/1899 if you don't use a good DayInWeek1Monday7Sunday
Exit Function
Else
End If
Do While Weekday(DateSerial(InYear, 1, i), vbMonday) <> DayInWeek1Monday7Sunday
i = i + 1
Loop
GetDayFromWeekNumber = DateAdd("ww", WeekNumber - 1, DateSerial(InYear, 1, i))
End Function
It works quite ok, taking in mind that the first day of the week is Sunday: 它工作得很好,记住一周的第一天是星期天:
Function fnDateFromWeek(ByVal iYear As Integer, ByVal iWeek As Integer, ByVal iWeekDday As Integer)
fnDateFromWeek = DateSerial(iYear, 1, ((iWeek - 1) * 7) + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function
You have to pass which day do you want as third parameter. 您必须通过哪一天作为第三个参数。 Thursday is day number 5. Credits to these guys: http://www.dreamincode.net/forums/topic/111464-calculate-date-from-year-weeknr-and-daynumber/ 星期四是第5天。对这些人的信任: http : //www.dreamincode.net/forums/topic/111464-calculate-date-from-year-weeknr-and-daynumber/
As an additional option, for those using the ISO weeknumber system, where Week 1 of the year is the first week of the year containing four days (or the week that includes the first Thursday of the calendar year, and the first day of the week is Sunday. 作为附加选项,对于那些使用ISO周数系统的人来说,一年中的第1周是包含四天的一年中的第一周(或包括该日历年的第一个星期一周的一周,以及一周的第一天)是星期天。
Option Explicit
Function WNtoDate(WN As Long, YR As Long, Optional DOW As Long = 5) As Date
'DOW: 1=SUN, 2=MON, etc
Dim DY1 As Date
Dim Wk1DT1 As Date
Dim I As Long
DY1 = DateSerial(YR, 1, 1)
'Use ISO weeknumber system
I = DatePart("ww", DY1, vbSunday, vbFirstFourDays)
'Sunday of Week 1
Wk1DT1 = DateAdd("d", -Weekday(DY1), DY1 + 1 + IIf(I > 1, 7, 0))
WNtoDate = DateAdd("ww", WN - 1, Wk1DT1) + DOW - 1
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.