在Excel VBA中根据输入的month / year创建过去12个月的数组,包括月份和年份 &g



是否有办法创建过去12个月的数组(Month/Year in "mm -yy"格式),以";mm -yy"从一个变量?

Use Dateadd

Sub Demo()
Dim s As String, ar, n As Integer
s = Format(Date, "mmm-yy") ' default
s = InputBox("mmm-yy", "Input mmm-yy", s)
ar = PriorYear(s)
For n = 1 To 12: Debug.Print n, ar(n): Next
End Sub
Function PriorYear(s) As Variant
Dim ar(1 To 12) As String, dt As Date, n As Integer
dt = DateValue("01-" & s)
For n = 12 To 1 Step -1
dt = DateAdd("m", -1, dt)
ar(n) = Format(dt, "mmm-yy")
Next
PriorYear = ar
End Function

请尝试更紧凑的版本:

Dim arr, d As Date: d = Date 'you can choose any date you need
arr = Application.Transpose(Evaluate("TEXT(DATE(" & Year(d) - 1 & ",row(" & month(d) & ":" & month(d) + 11 & "),1),""mmm-yy"")"))
Debug.Print Join(arr, "|")
如果OP证明他自己尝试了一些东西,我通常会发布一个答案,这是很好的了解这方面在我们的社区是强制性的。甚至用语言解释你所做的努力。我破例只是为了挑战,因为这个问题已经有了答案。

这篇后期的文章演示了如何通过Evaluate获取最近12个月的日期,基于像

这样的符号公式语法
{Text(Date(StartYear,Column(StartColumn:EndColumn),1),"mmm-yyyy")}  

附加功能:函数接受一个可选参数MonthsCount,将12上个月的默认值更改为任何其他正值。

Public Function LastNMonths(dt As Date, Optional MonthsCount As Long = 12)
'Purpose: get 1-dim array of last 12 month dates formatted "mmm-yy")
'a) get start date
Dim StartDate As Date: StartDate = DateAdd("m", -MonthsCount + 1, dt)
Dim yrs As Long:       yrs = Year(dt) - Year(StartDate)
'b) get column numbers representing months .. e.g. "J:U" or "A:L"
Dim cols As String
cols = Split(Cells(, Month(StartDate)).Address, "$")(1)
cols = cols & ":" & Split(Cells(, Month(dt) + Abs(yrs * 12)).Address, "$")(1)
'c) evaluate dates .. e.g. Text(Date(2020,Column(J:U),1),"mmm-yyyy")
LastNMonths = Evaluate("Text(Date(" & Year(StartDate) & _
",Column(" & cols & "),1),""mmm-yyyy"")")  
End Function

示例调用

您可能想要显示结果"平"数组,基于今天的日期输入(当前以2021年9月结束),在VB编辑器的直接窗口中通过连接列表

Debug.Print Join(LastNMonths(Date), "|")

返回。

Oct-2020|Nov-2020|Dec-2020|Jan-2021|Feb-2021|Mar-2021|Apr-2021|May-2021|Jun-2021|Jul-2021|Aug-2021|Sep-2021

最新更新