上周一的日期 Excel

问题描述 投票:0回答:5

今天是 2013 年 2 月 27 日,星期三。 我需要公式来返回上周一的日期。即 (02/17/2013)

我需要这样才能在发送电子邮件的 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
vba excel excel-formula excel-2010
5个回答
15
投票
Public Function LastMonday(pdat As Date) As Date
    LastMonday = DateAdd("ww", -1, pdat - (Weekday(pdat, vbMonday) - 1))
End Function

Weekday(yourdate, vbMonday) 返回 1 表示星期一,2 表示星期二,等等

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

通过从过去的日期中减去 Weekday()-1 天数,可以得到最近的星期一。

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

从该日期减去一周。

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

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


2
投票

计算 Weekday(Now()) 和 2(= 周一的工作日)之间的差,然后添加 7。


1
投票

Dan 的答案应该可以满足您对 VBA 的需求

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

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

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

因此,如果您将 08/04/2012 输入 DateCell,那么该公式将在 4 月 2 日星期一重新运行!

(归功于 MrExcel.com 和 Google 搜索!) 华泰 菲利普


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


0
投票

获取今天起的上周一日期:

Function GetLastMonday() As Date
    Dim today As Date
    Dim daysBack As Integer
    
    today = Date
    daysBack = Weekday(today, vbMonday) - 1
    GetLastMonday = DateAdd("d", -daysBack, today)
End Function
© www.soinside.com 2019 - 2024. All rights reserved.