2013-02-27 78 views
1

今天是2013年2月27日这是Wensday。 我需要一个公式,它会返回我前一个星期一的日期。这将是(2013年2月17日)上个星期一的日期Excel

我需要这样才能用于发送电子邮件的vba代码中的文件名或电子邮件主题。

With oMail 
    'Uncomment the line below to hard code a recipient 
    .To = "[email protected]" 
    'Uncomment the line below to hard code a subject 
    .Subject = "Current Report" 
    .Attachments.Add WB.FullName 
    .Display 
End With 
+0

那么,你到目前为止尝试过什么?如果你还没有尝试过任何东西,那么也许这会让你开始:http://msdn.microsoft.com/en-us/library/aa227527(v=vs.60).aspx – Sam 2013-02-27 16:05:49

+0

@Sam,你的链接缺失一个右括号。 – 2013-02-27 16:07:52

+0

@DougGlancy是吗?这个对我有用。我无法使用内置的SO链接功能,因为MSDN链接本身包含括号。在编辑之前你有没有看到它? – Sam 2013-02-27 16:12:34

回答

8
Public Function LastMonday(pdat As Date) As Date 
    LastMonday = DateAdd("ww", -1, pdat - (Weekday(pdat, vbMonday) - 1)) 
End Function 

平日(yourdate,vbMonday)返回星期一,2 1星期二等等

pdat - (Weekday(pdat, vbMonday) - 1) 

将通过从传递的日期减去Weekday() - 1#日给我们最近的星期一。

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

从该日期减去一周。

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

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

+0

嗨,我该如何使用?输入'= DateAdd(“01/01/2013”​​)'? – Mowgli 2013-02-27 17:30:40

+1

如果你在VBA模块中包含这个函数,那么你可以这样做:strSubject =“今天的主题是关于上周一(”&Format(LastMonday(Date),“mm/dd/yyyy”)&“)” With oMail .Subject = strSubject End With – 2013-02-27 17:39:52

2

计算平日(现在())和2(=工作日为星期一)之间的差值,然后加入7.

+0

你确定会返回**前一个星期一 - 不是下一个? – 2013-02-27 16:59:39

+0

彼得,我应该更具体。如果您将差异添加到7,然后从今天开始减去,那么您应该以前一个星期一结束! – 2013-02-27 17:14:01

+0

编辑这个答案包括一个具体的例子(单元格内计算)花了几分钟后搞清楚了我自己。“= TODAY() - (WEEKDAY(TODAY(),3)+7)” – goofology 2017-09-13 02:06:24

1

丹的答案应该涵盖VBA

或在Excel工作表中公式你的需求,你可以做这样的事情:

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

因此DateCell是一个范围,包含您想查找上一个星期一的日期的日期!

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

(信贷MrExcel.com和谷歌搜索!) HTH 菲利普

0

要接受的答案的功能有点更灵活,一个微小的改动,您可以指定一周中的哪一天,并有多远后退/前进你想要它。再次

dim myDt as date 
dim nextWed as date 
myDt = now() 
// Get next Wednesday (dow = Wednesday, weeksOffset is +1 
x = LastDow(myDt, vbWednesday, 1) 

由于原来的解决方案作者(丹Meltheus):

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 

有了这个功能,你可以得到,说了,下周三。

相关问题