是否有一種方法可以根據變數中的 "mmm-yy "中的月/年創建一個過去12個月的陣列(月/年格式)?
uj5u.com熱心網友回復:
使用Dateadd
Sub Demo()
Dim s As String, ar, n As Integer
s = Format(Date, "mmm-yy") ' 默認的。
s = InputBox("mmm-yy", "Input mmm-yy", s)
ar = PriorYear(s)
For n = 1 To 12: Debug.Print n, ar(n): Next: Debug.Print n, ar(n).
結束 子
Function PriorYear(s) As Variant
Dim ar(1 To 12) As String, dt As Date, n As Integer.
dt = DateValue("01-"/span> & s)
For n = 12 To 1 Step -1 "m"/span>, -1, dt)
ar(n) = Format(dt, "mmm-yy")
下一個。
PriorYear = ar
End Function[/span
uj5u.com熱心網友回復:
請你也試試更緊湊的版本:
Dim arr, d As Date: d = Date '你可以選擇任何你需要的日期。
arr = 應用程式。 Transpose(Evaluate("TEXT(DATE(" & Year(d) - 1 & ",row(" & month(d) & " 。 " & month(d) 11 & "),1),""mm-yy")")
Debug.Print Join(arr, "|"/span>)
如果OP證明他自己嘗試了一些東西,我通常會發布一個答案,這是很好的學習這一方面在我們社區是強制性的。甚至用語言解釋你所做的嘗試。我只是為了挑戰而破例,因為這個問題已經被回答了。
uj5u.com熱心網友回復:
這篇遲來的帖子演示了如何通過Evaluate獲得最近12個月的日期,基于一個符號公式語法,如
{Text(Date(StartYear,Column(StartColumn: EndColumn),1),"mmm-yyyy")}(StartYear,Column(StartColumn: EndColumn),1)
額外功能:該函式接受一個可選的引數MonthsCount,將默認值12個月改為任何其他正值。
Public Function LastNMonths(dt As Date, Optional MonthsCount As Long = 12)
'目的:獲得過去12個月的日期的1-dim陣列,格式為 "mmm-yy")。
'a) 獲得開始日期。
Dim StartDate As Date: StartDate = DateAdd("m"/span>, -MonthsCount 1, dt)
Dim yrs As Long: yrs = Year(dt) - Year(StartDate)
'b) 獲取代表月份的列數字 ......例如 "J:U "或 "A:L"。
Dim cols As String
cols = Split(Cells(, Month(StartDate)).Address, "$"/span>)(1)
cols = cols & ":" & Split(Cells(, Month(dt) Abs(yrs * 12)).地址, "$")(1)
'c) 評估日期 ...例如,Text(Date(2020,Column(J:U),1), "mm-yyyy")。
LastNMonths = Evaluate("Text(Date("/span> & Year(StartDate) & _
",Column(" & cols & "),1),""mmm-yyyy"")")
結束 功能
示例呼叫
你可能想在VB編輯器的即時視窗中通過一個連接的串列來顯示基于今天的日期輸入(目前在2021年9月結束)的結果 "平面 "陣列
Debug.Print Join(LastNMonths(Date), "|")
回傳e.g.
Oct-2020|Nov-2020|12月-2020|1月-2021|2月-2021|3月- 2021|Apr-2021|May-2021|Jun-2021|7月-2021|8月-2021|9月-2021
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324158.html
標籤:
