计算最后一个季度的开始日期

Lee*_*Mac 1 ms-access vba access-vba

我希望根据当前日期计算上个季度的开始日期。

哪里

Q1 = Jan-Mar
Q2 = Apr-Jun
Q3 = Jul-Sep
Q4 = Oct-Dec
Run Code Online (Sandbox Code Playgroud)

因此,如果当前日期为8th Jan 2018,则该函数将返回date 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
Run Code Online (Sandbox Code Playgroud)

我会很感激所提供的任何建议/建议。

Eri*_*k A 5

您要查找的函数(带有)DateAdd如下:

Public Function LastQuarter(theDate As Date) As Date
    LastQuarter = DateAdd("q", DatePart("q", theDate) - 2, DateSerial(Year(theDate), 1, 1))
End Function
Run Code Online (Sandbox Code Playgroud)

说明:

DateSerial(Year(theDate), 1, 1)) 返回本年度的第一季度。

DateAdd("q", DatePart("q", theDate), ThatDate)添加当前季度,返回下一个季度(例如,第一季度->第二季度)。因此,-2减去两个季度。

关于笨拙:此功能可能更短,可能包括更少的操作,但更难理解。这可能相关也可能不相关。

关于参数:我已经花了一些时间,既方便测试,又让您保持可变。您可以做到这一点。

感谢Gustav提出使用建议DatePart而不是Format

  • 您还可以使用_DatePart_返回数字:`DateAdd(“ q”,DatePart(“ q”,theDate),ThatDate)`。 (2认同)