Excel VBA 基于输入月年变量生成近12个月mmm-yy格式数组的方法
Excel VBA 基于mmm-yy格式基准生成过去12个月数组的实现
完全可以实现,核心逻辑是先将字符串格式的基准月转换为日期类型,再通过日期偏移计算生成历史月份,最后格式化输出存入数组即可。
完整实现代码
你可以直接使用下面封装好的通用函数:
Function GetLast12Months(baseMonthStr As String) As Variant Dim baseDate As Date Dim monthArr(11) As String Dim i As Integer ' 将mmm-yy格式的字符串转换为日期类型 ' 中文环境下识别英文月份缩写可改为 baseDate = DateValue(Replace(baseMonthStr, "-", " 1, ")) baseDate = CDate(baseMonthStr) ' 循环生成过去12个月(默认包含基准月) For i = 0 To 11 ' 中文环境下输出英文月份缩写,将格式改为 "[$-en-US]mmm-yy" monthArr(i) = Format(DateAdd("m", -i, baseDate), "mmm-yy") Next i GetLast12Months = monthArr End Function
调用示例
Sub TestGenerateMonths() Dim baseMonth As String Dim resArray As Variant Dim idx As Integer ' 替换为你存储基准月份的变量 baseMonth = "Oct-24" resArray = GetLast12Months(baseMonth) ' 测试输出到VBA立即窗口 For idx = LBound(resArray) To UBound(resArray) Debug.Print resArray(idx) Next idx End Sub
注意事项
- 数组默认顺序为从基准月倒序排列,即第一个元素为基准月,第二个为上一个月,以此类推。如果需要正序排列,将循环赋值逻辑改为
monthArr(11 - i) = Format(DateAdd("m", -i, baseDate), "mmm-yy")即可。 - 如果系统区域为中文,需要额外调整日期转换和格式化的参数,避免出现月份识别错误、输出中文月份的问题。
- 如果不需要包含基准月,只需将循环起始值改为1,对应数组长度调整为11即可。
内容的提问来源于stack exchange,提问作者Suresh Raja
相关产品推荐
相关产品推荐

