根据今天的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