发现选定月份的最后一天

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

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

  • B2 =年
  • A2 =月
  • 我是否想find第一,第二,第三,第四或第五个事件
  • xday =是代表星期几的数字(1 = Sun到7 = Sat)

我想要的东西只能find给定月份的最后一天,而不需要确定月份是否有4或5个星期一。

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

对于这个数据布局,

上个星期在emonth

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月份上周二(周三)的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函数的 VBA快捷方式只是下个月的零日。 Abs函数是必要的,因为VBA将True视为-1,而不是像工作表一样。

我的问题的答案感谢@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 = Day(1-7)