【发布时间】:2018-12-06 10:57:55
【问题描述】:
我需要确定给定数字是星期几,
例如我有 Year = 2018 Calendar Week = 51 和 Number = 3(这是一周的第三天)
日历第 51 周落在 12 月
每周从周一到周日开始
由于第 51 周的第 3 天是第 19 天,因此结果应该是 “19/12/2018”。
我们可以用excel公式或VBA宏来做吗?
非常感谢这方面的任何帮助。
谢谢, 加内什
【问题讨论】:
我需要确定给定数字是星期几,
例如我有 Year = 2018 Calendar Week = 51 和 Number = 3(这是一周的第三天)
日历第 51 周落在 12 月
每周从周一到周日开始
由于第 51 周的第 3 天是第 19 天,因此结果应该是 “19/12/2018”。
我们可以用excel公式或VBA宏来做吗?
非常感谢这方面的任何帮助。
谢谢, 加内什
【问题讨论】:
公然从here复制你可以使用Excel公式:
=DATE(<YearNumber>, 1, -2) - WEEKDAY(DATE(<YearNumber>, 1, 3)) + <WeekNumber> * 7+ <DayNumber> -1
所以=DATE(2018, 1, -2) - WEEKDAY(DATE(2018, 1, 3)) + 51 * 7 + 3 - 1 返回2018 年 12 月 19 日。
【讨论】:
=DATE(F3, 1, -2) - WEEKDAY(DATE(F3, 1, 3)) + G3 * 7+ (H3-1)
通过vba获取。一个是宏,一个是udf。
宏
Sub getWeekDays()
Dim vDB, vS(), vR()
Dim y As Integer, s As Date, e As Date
Dim i As Integer, k As Integer
Dim n As Integer
'y = Year
y = InputBox("Input year : 2018 ")
s = DateSerial(y, 1, 0)
e = DateSerial(y + 1, 1, 0)
n = e - s
For i = 1 To n
d = s + i
If DatePart("ww", d, vbMonday) = DatePart("ww", d + 1, vbMonday) Then
Else
k = k + 1
ReDim Preserve vR(1 To 2, 1 To k)
vR(1, k) = DatePart("ww", d, vbMonday) & " Wk"
If k = 1 Then
vR(1, k) = DatePart("ww", s + 1, vbMonday) & " Wk"
vR(2, k) = Format(s + 1, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
Else
vR(2, k) = Format(d - 6, "dd.mm.yyyy") & "~" & Format(d, "dd.mm.yyyy")
End If
End If
Next i
Range("a1").CurrentRegion.Clear
Range("a1").Resize(k, 2) = WorksheetFunction.Transpose(vR)
End Sub
UDF
Function getWeekDay(y As Integer, WeekNum As Integer, DayOrder As Integer)
Dim s As Date, e As Date
Dim i As Integer
Dim n As Integer
Application.Volatile
'WeekNum = 51
'y = Year
'DayOrder <~~ If third day DayOrder = 3
s = DateSerial(y, 1, 0)
e = DateSerial(y + 1, 1, 0)
n = e - s
For i = 1 To n
d = s + i
If DatePart("ww", d, vbMonday) = WeekNum Then
getWeekDay = d + DayOrder - 1
Exit Function
End If
Next i
End Function
【讨论】: