上个星期一Excel的date
今天是02/27/2013这是Wensday。 我需要一个公式,这个公式会返回给我上个星期一的date。这将是(02/17/2013)
我需要这样我可以使用文件名或电子邮件主题在我的vba代码发送电子邮件。
With oMail 'Uncomment the line below to hard code a recipient .To = "myemail@email.com" 'Uncomment the line below to hard code a subject .Subject = "Current Report" .Attachments.Add WB.FullName .Display End With
Public Function LastMonday(pdat As Date) As Date LastMonday = DateAdd("ww", -1, pdat - (Weekday(pdat, vbMonday) - 1)) End Function
平日(yourdate,vbMonday)周一返回1,周二返回2等
pdat - (Weekday(pdat, vbMonday) - 1)
将通过从通过的date中减去平日() – 1天来给我们最近的星期一。
DateAdd("ww", -1, ...)
从该date减去一周。
LastMonday(cdate("2/27/13"))
2013年2月18日(周一,不是17日)
计算Weekday(Now())和2(星期一为星期一)之间的差异,然后加上7。
Dan的回答应该涵盖VBA中的需求
或在Excel工作表公式中,你可以做这样的事情:
=TEXT(DateCell- (WEEKDAY(DateCell,2)-1),"dddd mmmm dd")
所以DateCell是一个范围,包含你想要find上个星期一的date的date!
所以如果你把08/04/2012放在DateCell中,那么这个公式将会在4月2日星期一重播!
(信用MrExcel.com和谷歌search!)HTH菲利普
为了使接受的答案的function更具多面性,可以通过一些较小的更改来指定一周中的哪一天,以及您想要的后退/前进的距离。
Public Function LastDow(pdat As Date, dow as integer, _& optional weeksOffset = -1 as integer) As Date LastDow = DateAdd("ww", weeksOffset, pdat - (Weekday(pdat, dow) - 1)) End Function
有了这个function,你可以得到,比如下个星期三:
dim myDt as date dim nextWed as date myDt = now() // Get next Wednesday (dow = Wednesday, weeksOffset is +1 x = LastDow(myDt, vbWednesday, 1)
再次感谢原作者Dan Meltheus。