我希望根据当前日期计算上一季度的开始日期。
哪里
Q1 = Jan-Mar
Q2 = Apr-Jun
Q3 = Jul-Sep
Q4 = Oct-Dec
因此,如果当前日期为8th Jan 2018
,则该函数将返回日期1st Oct 2017
。
我编写了以下代码,然而,这看起来很笨拙而且不优雅,我觉得可能有更好的方式来编写它(例如,使用dateadd
)。
Function LMLastQuarterStart() As Date
Dim mo As Integer
Dim yr As Integer: yr = Year(Date)
Select Case Month(Date)
Case 1 To 3: mo = 10: yr = yr - 1
Case 4 To 6: mo = 1
Case 7 To 9: mo = 4
Case Else: mo = 7
End Select
LMLastQuarterStart = DateSerial(yr, mo, 1)
End Function
感谢您提出的任何意见/建议,谢谢。
答案 0 :(得分:4)
您正在寻找的DateAdd
功能如下:
Public Function LastQuarter(theDate As Date) As Date
LastQuarter = DateAdd("q", DatePart("q", theDate) - 2, DateSerial(Year(theDate), 1, 1))
End Function
说明:
DateSerial(Year(theDate), 1, 1))
返回当年的第一季度。
DateAdd("q", DatePart("q", theDate), ThatDate)
增加当前季度,返回下一季度(例如第1季度 - >第2季度)。所以-2减去了两个季度。
关于笨重:这个功能可能更短,可能包括更少的操作,但它更难理解。这可能是也可能不相关。
关于参数:我已经让它花了一个日期,既方便测试又让你保持变量。你可以用你所想做的。
感谢Gustav建议使用DatePart
代替Format