根据今天的date计算当前和随后的FY季度

我正在计算当前的FY季度(10月1日开始),基于=TODAY()date和接下来的几个季度,结果是:

 Q2 2017 Q3 2017 Q4 2017 Q1 2018 ... Qx 20xx 

用这个公式:

 ="Q" & ROUNDDOWN(MOD((TODAY()-DATE(YEAR(TODAY()-365),10,1)+K6*(365/4))/(365/4),4)+1,0)&" "&YEAR(TODAY()+K6*(365/4)) 

结果是:

 K6=X Result 0 Q2 2017 1 Q3 2017 2 Q4 2017 3 Q1 2017 * should be 2018 4 Q2 2018 5 Q3 2018 6 Q4 2018 7 Q1 2018 * should be 2019 8 Q2 2019 

问题1:他们应该在四分之一的时间里改变,而且

问题2:这是一个混乱的公式 – 有没有办法让它更简单?

完全公开,我打算在VBA FOR x = 0...循环中实现使用此公式,x =从今天开始,并相应地设置单元格的公式。

编辑:或者,如何才能使用唯一的VBA生成所需的输出,并设置在所需的单元格作为文本string? 代表FY季度的string可能会使我的应用程序更加稳定。

将此函数添加到模块表单中

 Function NextQuarter(ByVal iCQ As Integer) As String Dim qtrd As Date Dim qtr As Integer qtrd = DateAdd("m", 3 + (3 * iCQ), Now()) qtr = (Month(qtrd ) + 2) \ 3 NextQuarter = "Q" & qtr & " " & Year(qtrd ) End Function 

在你的单元格中使用公式“= NextQuarter(K6)”

尝试下面的VBA代码(我把结果放在列2,从第2行):

 Option Explicit Sub FormatQandY() Dim x As Long For x = 0 To 10 '<-- loop from today 10 Q ahead Cells(x + 2, 1) = "Q" & WorksheetFunction.RoundUp((Month(DateAdd("m", x * 3, Date))) / 3, 0) & "-" & Year(DateAdd("m", x * 3, Date)) Next x End Sub