我有四个单元格如下,我想将它们组合在一个单元格作为短日期:
A1: Year
A2: Month
A3: Week number
A4: Week day
现在我想要,excel查看上面的单元格并以短格式告诉我日期。我不想在最终结果中看到日期名称。
举个例子:
A1: 2016
A2:五月
A3: 20
A4:星期三
然后我想得到=>的 2016年5月18日
我感谢任何帮助。
答案 0 :(得分:1)
试试这个:
=DATE(A$1,1,-6)-WEEKDAY(DATE(A$1,1,1),2)+A3*7+CHOOSE(IF(A4="Monday",1,IF(A4="Tuesday",2,IF(A4="Wednesday",3,IF(A4="Thursday",4,If(A4="Friday",5,if(A4="Saturday",6,IF(A4="Sunday",7,0))))))),1,2,3,4,5,6,7)
A1
=年,A3
=周,A4
=工作日
抱歉,忘了Text(,"d")
功能不起作用。
答案 1 :(得分:1)
=DATE(A1,1,1)+7*(A3-1)+MATCH(A4,{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},0)-WEEKDAY(DATE(A1,1,1)+7*(A3-1))
以上将为您提供16/05/11的日期,当与WEEKNUM和WEEKDAY一起检查时,是第20周和第4天(周三)。
如果您希望日期为16/05/18,当使用WEEKNUM和WEEKDAY检查时是第21周和第4天(周三),则删除-1并使用A3。
概念证明
答案 2 :(得分:0)
试试这个:
=DATE(A1,MONTH(DATEVALUE(A2&" 1")),A3)
你真的需要工作日吗?
答案 3 :(得分:0)
这种简单明了的方法从今年的第一天开始,逐步完成日历,直到找到适当的文本日的正确周数的日期:
Public Function INeedADate(yr As Long, wkmn As Long, dy As String) As Date
Dim i As Long, dtStart As Date, d As Date
Dim x As String
x = LCase(dy)
dtStart = DateSerial(yr, 1, 1)
With Application.WorksheetFunction
For i = 0 To 400
d = dtStart + i
If .WeekNum(d) = wkmn And LCase(Format(d, "dddd")) = x Then
INeedADate = d
Exit Function
End If
Next i
End With
End Function
您可以更改单元格的格式以符合您的需要。
如果您的星期一开始而不是星期日使用:
.WeekNum(d,2)
取代:
.WeekNum(d)