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

时间:2017-01-27 07:04:55

标签: excel vba excel-vba date

我正在尝试根据=TODAY()日期和下一个x季度来计算当前的FY季度(10月1日开始),结果是:

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生成所需的输出,并将所需的单元格设置为文本字符串?代表FY Quarter的字符串可以使我的应用程序更稳定。

2 个答案:

答案 0 :(得分:4)

将此功能添加到模块表

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

答案 1 :(得分:1)

尝试下面的VBA代码(我将结果放在A列,第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