我有一个包含周数和星期几的表格。
例:
J2 = 18
G2 =星期一
如何将此转换为2018-04-30?
我可以找到许多用于转换其他方式的线程,这意味着日期到星期。但到目前为止,我在周末+工作日都找不到任何东西 有人知道方法吗?
答案 0 :(得分:1)
在代码中尝试这个必要的注释:
Option Explicit
Sub GetDate()
Dim year As Date, day As Long
'convert day in G2 to integer
Select Case Range("G2").Value
Case "Monday"
day = 1
Case "Tuesday"
day = 2
'rest of cases
End Select
'declare what year you want
year = "01-01-2018"
'move from first week to the week specified in J2
year = DateAdd("d", (Range("J2").Value - 1) * 7, year)
'move back to first day of the week
Do While DatePart("w", year, vbMonday) <> 1
year = DateAdd("w", -1, year)
Loop
'find date of particular day
Do While DatePart("w", year, vbMonday) <> day
year = DateAdd("w", 1, year)
Loop
End Sub
答案 1 :(得分:1)
WEEKDAY
函数的(可选)第二个参数确定一周的第一天是什么。两种最常见的选择是:
1
:星期日(1
)到星期六(7
)
或
2
:星期一(1
)到星期日(7
)
但是,如果你愿意,你可以在星期三,星期五等开始。现在选择一个选项。
所以,从1月1日开始(无论你在哪个未指定的年份),并从1月份的1 st 的工作日减去,根据以下任何一个开始 - 你挑选的那天这为您提供第1周的基线。要开始周 n ,您只需添加7*(n-1)
天。
最后,您需要重新添加工作日。我建议在数组上使用MATCH
。你的数组将是你的工作日,按顺序排列,用大括号括起来。所以,对于星期日到星期六,你会使用
MATCH(G2,{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},0)
从1
(“星期日”)到7
(“星期六”)获取一个号码,如果小区#NA
不包含日期名称,则为G2
坚持下去,你得到这样的东西:
=DATE(YEAR(NOW()),1,1) - WEEKDAY(DATE(YEAR(NOW()),1,1),1) + 7*(J2-1) + MATCH(G2,{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},0)
答案 2 :(得分:1)
决定取决于你对“周数”的定义。
如果您使用的是ISO-8601定义,其中一周从星期一开始,而第1周包含一年中的第一个星期四,则可以使用此工作表公式:
=DATE(YEAR(TODAY()),1,-2)-WEEKDAY(DATE(YEAR(TODAY()),1,7),14)+$J$2*7+MATCH($G$2&"*",{"Monday";"Tuesday";"Wednesday";"Thursday";"Friday";"Saturday";"Sunday"},0)-1
您可能需要根据区域设置将逗号更改为分号
解释:
首先,找到上一年的最后一个星期一:
DATE(YEAR(TODAY()),1,-2)-WEEKDAY(DATE(YEAR(TODAY()),1,7),14)
然后加上所需周数的七(7)倍:
+$J$2*7
然后添加从星期一到该周所需日期的天数:
+MATCH($G$2&"*",{"Monday";"Tuesday";"Wednesday";"Thursday";"Friday";"Saturday";"Sunday"},0)-1