2013-02-27 111 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 

有了這個功能,你可以得到,說了,下週三。

相關問題