【问题标题】:Find Last Chosen Day of a Chosen Month查找选定月份的最后选定日期
【发布时间】:2015-10-31 13:50:45
【问题描述】:

我有这个代码可以让我找到给定月份的第一天或最后一天。

=DATE(B2,A2,1+7*n)-WEEKDAY(DATE(B2,A2,8-xday))

  • B2 = 年
  • A2 = 月
  • n = 我是否想找到第 1、2、3、4 或 5 次出现
  • xday = 是代表星期几的数字(1 = 周日到 7 = 周六)

我想要的东西只能找到给定月份的最后一天,而我不必弄清楚这个月是有 4 个还是 5 个星期一。

如果有人可以告诉我如何在 VBA 中创建我想要的结果,那将是完美的。

【问题讨论】:

  • 是否必须成为VBA?因为使用工作表公式很容易做到这一点:=IF(DATE(B2,D4,36)-WEEKDAY(DATE(B2,D4,8-xday))<DATE(B2,D4+1,1),DATE(B2,D4,36)-WEEKDAY(DATE(B2,D4,8-xday)),DATE(B2,D4,29)-WEEKDAY(DATE(B2,D4,8-xday)))
  • 您已经有正确的公式可以找到它。只需在 A2+1 月中查找第零次出现。
  • @Adam - 这是我想要的,但是当我进入三月(3)六月(6)八月(8)或十一月(11)月份时它不起作用,似乎返回NAME#当我输入其中任何一个时。请提供修复。谢谢

标签: excel date find dayofweek


【解决方案1】:

对于这个数据布局,

      

D2中的公式是,

=EOMONTH(A$2,0)-WEEKDAY(EOMONTH(A$2,0)-C2)*(WEEKDAY(EOMONTH(A$2,0))<>C2)

C2:C8 和 c11:C17 只是 1->7 格式为 ddd。

8 月上周二(工作日 3)的 VBA 将类似于此。

dim lastDate as date
'last Tue in Aug-2015
lastDate = dateserial(2015, 9, 0)-abs(weekday(dateserial(2015, 9, 0)-3)*(weekday(dateserial(2015, 9, 0))<>3))
debug.print lastDate
'last Sat in Jul-2015
lastDate = dateserial(2015, 8, 0)-abs(weekday(dateserial(2015, 8, 0)-7)*(weekday(dateserial(2015, 8, 0))<>7))
debug.print lastDate

请注意,工作表EOMONTH function 的 VBA 快捷方式就是下个月的零日。 Abs function 是必要的,因为 VBA 将 True 视为 -1,而不是像工作表那样的 1。

【讨论】:

    【解决方案2】:

    感谢@Dave 并由我编辑,我的问题的答案是:

    =IF(DATE(B2,D4,36)-DAY(DATE(B2,D4,8-xday))<DATE(B2,D4+1,1),DATE(B2,D4,36)-DAY(DATE(B2,D4,8-xday)),DATE(B2,D4,29)-DAY(DATE(B2,D4,8-xday)))
    

    地点:

    • B2 = 年
    • D4 = 月 (1-12)
    • Xday = 第 (1-7) 天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2017-08-28
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多