Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 任何给定日期之前的日历季度末_Date_Excel_Vba - Fatal编程技术网

Date 任何给定日期之前的日历季度末

Date 任何给定日期之前的日历季度末,date,excel,vba,Date,Excel,Vba,基本上,我可以有任何日期,我想得到上一个季度的适当季度结束日期 三个例子: 19/07/2013 -> 30/06/2013 30/06/2013 -> 31/03/2013 28/02/2013 -> 31/12/2012 在Excel VBA中,似乎使用DateAdd减去一个季度只是从日期减去三个月,例如19/07/2013->19/04/2013。这对我没有好处 你认为做这件事最好的方法是什么 也许提取月份部分,然后将其与 可能的住处 或者可能有一些空的日期 01/0

基本上,我可以有任何日期,我想得到上一个季度的适当季度结束日期

三个例子:

19/07/2013 -> 30/06/2013
30/06/2013 -> 31/03/2013
28/02/2013 -> 31/12/2012
在Excel VBA中,似乎使用
DateAdd
减去一个季度只是从日期减去三个月,例如
19/07/2013
->
19/04/2013
。这对我没有好处

  • 你认为做这件事最好的方法是什么
  • 也许提取月份部分,然后将其与 可能的住处
  • 或者可能有一些空的日期
    01/01/2000
    然后添加给定日期的季度数 显示此空日期,然后减去一天以获得 上一季度末位置(尽管这可能会导致问题 当日期翻转到12月31日之前不到一年时
请考虑:

=IF(MOD(MONTH(A1),3)=0,EOMONTH(A1,-3),  
 IF(MOD(MONTH(A1),3)=1,EOMONTH(A1,-1), 
                       EOMONTH(A1,-2)))  

编辑:评论中有一个更好的答案。

感谢excel公式,当然为我提供了将逻辑放入sub的想法。但是2013年2月28日返回0?D1是一个错误吗?工作是一种享受。模是个好主意。现在将其放入vba代码中。您可以将MOD逻辑放入单个EOMONTH函数中,即
=EOMONTH(A1,MOD(-MONTH(A1),3)-3)
…或者此版本可能更透明
=DATE(YEAR(A1),FLOOR(MONTH(A1)-1,3)+1,0)
,这太棒了,Barry。多么简洁的逻辑啊@barryhoudini给出了通用四分之一的公式1-3月,4-6月。。。如果我想给出我自己的季度列表,说季度在11月结束,该怎么办?