在VBA中查找上一季度末

我试图find当前date的上个季度末,格式化,以便我只返回月份名称。

例如,今天是“9/9/2014”,我想返回“六月”,因为这是上个季度末的月份。

Format(DateAdd("m", -3, Now), "MMMM")

但这意味着我需要硬编码几个月,我不得不回去,这不是我想要实现的。 作为VBA的初学者,请耐心等待。

任何帮助,将不胜感激! 谢谢!

你想要一个函数返回一个date,而不是一个string。 获取正确的date,然后使用现有的格式函数来获取string。 然后,当你想要实际的date,你没有写一个新的function。

 Public Function EndOfLastQuarter(ByVal dtNow As Date) As Date EndOfLastQuarter = DateSerial(Year(dtNow), (((Month(dtNow) - 1) \ 3) * 3) + 1, 0) End Function ?Format(EndOfLastQuarter(Now),"mmmm") June 

这是一个“一线”,因为你的季度结束是三月,六月,九月,十二月:

 Format(DateAdd("m", -(Month(DT) - 1) Mod 3 - 1, DT), "mmmm") 

如果DT是某个date。 对于今天,用DTreplaceDT

要返回一个真正的date,您可以在工作表单元格中将其格式化为date,请删除格式化function,然后使用中央部分

在工作表单元格中,如果A1包含date,则:

 =IF(MONTH(A1)<4,"December",IF(MONTH(A1)<7,"March",IF(MONTH(A1)<10,"June","September"))) 

编辑

VBA中

 Sub demo() Dim d As Date, ary() ary = Array("December", "December", "December", _ "March", "March", "March", _ "June", "June", "June", _ "September", "September", "September") d = Date m = ary(Month(d) - 1) MsgBox m End Sub 

或者在一行中:

 GetQuarter = Format(Int((Month(now) - 1) / 3) * 3 & "/1/2014", "mmmm") 

看来这个答案已经有很多了,但是请允许我提出另一个答案:

 Choose(worksheetfunction.Roundup(month(Date)/3, 0), "Dec", "Apr", "Jun", "Sep")