excel 如何避免“结束日期基于季度末”错误[重复]

mhd8tkvw  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(110)

此问题在此处已有答案

how can I calculate a Start and End Date based on Quarter End(3个答案)
5天前关闭。
我需要以YYYYMMDD格式自动计算最近的结束日期(也称为QRT_END)。因此,由于我们处于20221120,结束日期将是今天之前的上一个季度结束日期,即20220930。


我需要添加到下面的VBA语法中,但不要对其进行大幅度更改。应尽可能保留以前的语法。问题是,对于10月(第10个月)或之前的任何月份,它都能正常工作,并显示正确的上一季度末,如20220331、20220630。但是,当它在11月或12月运行时,它会错误地添加“0”,例如:今天运行时显示为202201030。它应该显示为20220930。


之所以存在“0”,是因为前3个季度的日期不能为2022331、2022630或2022930,而应显示为20220331、20220630或20220930。在下一年的1月、2月或3月运行时,应显示为20221231。



Private Function getQRT_END() As String

    Dim endmonth As Variant
    Dim endyear As Variant
    Dim Day As Variant

    endmonth = Month(Date) - 1
    If endmonth = 0 Then
        endyear = Year(Date) - 1
        endmonth = 12
        day = 31
    Else
        endyear = Year(Date)
        If endmonth = 3 Then
            day = 31
        Else
            day = 30
        End if
        endmonth = “0” & endmonth
    End If
    getQRT_END = endyear & endmonth & day
End Function
bis0qfac

bis0qfac1#

而不是...

endmonth = “0” & endmonth

试试这个...

endmonth = Format(endmonth, "0#")
pvabu6sv

pvabu6sv2#

这似乎更简单:

Option Explicit
Private Function getQRT_END() As String
    Dim subtrMonths As Long
    Dim qtrEnd As Date
    
subtrMonths = (Month(Date) - 1) Mod 3
qtrEnd = DateSerial(Year(Date), Month(Date) - subtrMonths, 0)

getQRT_END = Format(qtrEnd, "yyyymmdd")
End Function

它依赖于VBA(和Excel)行为,其中任何月份的第0天都是上个月的最后一天。
使用Mod函数可以计算从当前月份减去多少个月。

相关问题