【发布时间】:2017-12-28 15:14:07
【问题描述】:
我有一个包含 ids 的数据表,其中的开始日期和结束日期都关联。
RowNo AcNo StartDate EndDate
1 R125 01/10/2017 30/09/2020
2 R126 01/10/2017 30/09/2018
3 R127 01/10/2017 30/09/2019
4 R128 01/10/2017 30/09/2020
我需要扩展(即取消透视)此表,以便在每个 AcNo 的开始日期和结束日期(含)之间的每个 eomonth 允许一行。行号不重要。
AcNo EOMONTHs
R125 Oct 17
R125 Nov 17
R125 Dec 17
R125 Jan 18
R125 Feb 18
R125 Mar 18
...
R128 Apr 20
R128 May 20
R128 Jun 20
R128 Jul 20
R128 Aug 20
R128 Sep 20
我可以用这样的一对公式来完成每一行,
'in F2
=IF(ROW(1:1)-1<DATEDIF(C$2, D$2, "m"), B$2, TEXT(,))
'in G2
=IF(ROW(1:1)-1<DATEDIF(C$2, D$2, "m"), EOMONTH(C$2, ROW(1:1)-1), TEXT(,))
'F2:G2 filled down
但是,我有数千行 AcNos,这对于单独的行执行起来很麻烦。
我还使用 VBA 的 DateDiff 为各个行形成循环。
Dim m As Long, ms As Long
With Worksheets("Sheet2")
.Range("F1:G1") = Array("AcNo", "EOMONTHs")
ms = DateDiff("m", .Cells(2, "C").Value2, .Cells(2, "D").Value2)
For m = 1 To ms + 1
.Cells(m, "M") = .Cells(2, "B").Value2
.Cells(m, "N").Formula = "=EOMONTH(C$2, " & m - 1 & ")"
Next m
End With
同样,这一次只扩展一行。
如何循环遍历将每个系列堆叠成一列的行?欢迎对我的公式或代码进行调整的任何建议。
【问题讨论】:
-
我认为原件被删除了?
-
original 因基本上没有表现出原创性而被关闭。但是,我有一个解决方案在等待,这似乎是一个有趣的问题,所以我重新发布了;希望有一个更好的问题。正如我过去所做的那样,我对所有新答案持开放态度。一个公式或 unpivot 方法会很高兴看到。
-
如果我明天有时间休息,今天就建一个棚子。刚进来喝点水降温。
标签: excel excel-formula datediff unpivot vba