上周一Excel的日期

时间:2013-02-27 15:56:13

标签: excel vba excel-vba excel-formula excel-2010

今天是02/27/2013,这是Wensday。 我需要一个公式,它将返回上周一的日期。这将是(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

4 个答案:

答案 0 :(得分:12)

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)

将通过减去工作日() - 从过去日期开始的1天来给我们最近的星期一。

DateAdd("ww", -1, ...)

从该日期减去一周。

LastMonday(cdate("2/27/13"))

返回2013年2月18日(星期一,而不是17日)

答案 1 :(得分:2)

计算Weekday(Now())和2(=星期一的工作日)之间的差异,然后加上7。

答案 2 :(得分:1)

Dan的回答应该涵盖你在VBA中的需求

或在Excel工作表公式中,您可以执行以下操作:

    =TEXT(DateCell- (WEEKDAY(DateCell,2)-1),"dddd mmmm dd")

所以DateCell是一个范围,包含您想要查找上一个星期一的日期的日期!

所以如果你把08/04/2012放在DateCell中,那么那个公式将在4月2日星期一重新开始!

(感谢MrExcel.com和Google搜索!) HTH 菲利普

答案 3 :(得分:0)

为了使接受的答案的功能更加通用,可以通过几个小的更改来指定一周​​中的哪一天,以及您希望它返回/前进的距离。

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

使用此功能,您可以获得,例如,下周三:

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)。