【问题标题】:Date for Previous Monday Excel上周一的日期 Excel
【发布时间】:2013-02-27 15:56:12
【问题描述】:

今天是 2013 年 2 月 27 日,也就是星期三。 我需要公式,它将返回上周一的日期。这将是 (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

【问题讨论】:

  • 嗯,到目前为止你尝试了什么?如果你还没有尝试过任何东西,那么也许这会让你开始:msdn.microsoft.com/en-us/library/aa227527(v=vs.60).aspx
  • @Sam,您的链接缺少右括号。
  • @DougGlancy 是吗?这个对我有用。我无法使用内置的 SO 链接功能,因为 MSDN 链接本身包含括号。在我进行编辑之前你可能看到了吗?
  • @Sam,没错。我做到了。

标签: vba excel excel-formula excel-2010


【解决方案1】:
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 号)

【讨论】:

  • 嗨,我该如何使用这个?我要输入=DateAdd("01/01/2013") 吗?
  • 如果你在你的 VBA 模块中包含这个函数,那么你可以这样做: strSubject = "今天的主题大约是上周一(" & Format(LastMonday(Date), "mm/dd/ yyyy") & ")" With oMail .Subject = strSubject End With
【解决方案2】:

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

【讨论】:

  • 您确定返回上一个星期一 - 而不是下一个?
  • 彼得,我应该更具体一点。如果你把差值加到 7 上,然后从今天减去它,你应该得到前一个星期一!
  • 在自己花了几分钟时间弄清楚后,编辑了这个答案以包含一个具体的例子(单元内计算)。 "=TODAY()-(WEEKDAY(TODAY(),3)+7)"
  • 还有:=TODAY()-WEEKDAY(TODAY(),3)-7(删除 2 个括号)
【解决方案3】:

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

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

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

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

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

(归功于 MrExcel.com 和 Google 搜索!) 高温高压 菲利普

【讨论】:

    【解决方案4】:

    为了使已接受答案的功能更加通用,您可以通过一些细微的更改来指定一周​​中的哪一天,以及您希望它向后/向前多远。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多