我希望根据当前日期计算上一季度的开始日期。
哪里
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感谢您提供的任何意见/建议,谢谢。
发布于 2018-01-09 04:25:29
您正在寻找的带有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
https://stackoverflow.com/questions/48156513
复制相似问题