上个星期一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。