鉴于一些看起来像这样的数据:
date CAY
1/31/1952 0.02
2/29/1952 0.03
3/31/1952 0.02
4/30/1952 0.03
1/31/1953 0.03
2/28/1953 0.03
3/31/1953 0.03
4/30/1953 0.02
1/31/1954 0.03
2/28/1954 0.03
3/31/1954 0.03
4/30/1954 0.03
1/31/1955 0.04
2/28/1955 0.03
3/31/1955 0.02
4/30/1955 0.02
1/31/1956 0.01
2/29/1956 0.00
3/31/1956 0.00
4/30/1956 0.00
这些日期具有误导性。 1月份的值实际上是每季度,这意味着我希望从1931年1月31日到1931年3月31日的每日值为0.02。
更具体地说,我的数据中的季度是1/2/3/4个月:
Quarter Report period
1 January 1 through March 31
2 April 1 through June 30
3 July 1 through September 30
4 October 1 through December 31
预期产量:
date CAY
1/2/1952 0.02
1/3/1952 0.02
1/4/1952 0.02
1/7/1952 0.02
1/8/1952 0.02
1/9/1952 0.02
1/10/1952 0.02
1/11/1952 0.02
1/14/1952 0.02
1/15/1952 0.02
1/16/1952 0.02
1/17/1952 0.02
1/18/1952 0.02
1/21/1952 0.02
1/22/1952 0.02
1/23/1952 0.02
1/24/1952 0.02
1/25/1952 0.02
1/28/1952 0.02
1/29/1952 0.02
1/30/1952 0.02
1/31/1952 0.02
2/1/1952 0.02
...
4/1/1952 0.03
4/2/1952 0.03
...
7/1/1952 0.02
....
11/1/1952 0.03
如何在excel中轻松完成?
通过Sheet1上的数据运行此命令。
Option Explicit
Sub dailyData()
Dim vals As Variant, d As Long, fd As Long, ld As Long
With Worksheets("sheet1")
fd = DateSerial(Year(Application.Min(.Columns(1))), 1, 1)
ld = DateSerial(Year(Application.Max(.Columns(1))), 12, 31)
ReDim vals(1 To (ld - fd + 2), 1 To 2)
vals(1, 1) = "date": vals(1, 2) = "CAY"
For d = fd To ld
vals(d - fd + 2, 1) = d
vals(d - fd + 2, 2) = .Cells(Application.Match(CLng(DateSerial(Year(d), Int((Month(d) - 1) / 3) + 2, 0)), .Columns("A"), 0), "B").Value
Next d
.Cells(1, "C").Resize(UBound(vals, 1), UBound(vals, 2)) = vals
.Cells(1, "C").Resize(UBound(vals, 1), 1).NumberFormat = "mm/dd/yyyy"
End With
End Sub
要生成日期,请输入并选择第一个日期,然后选择主页选项卡 - >编辑 - >填充 - >系列... https://support.office.com/en-us/article/create-a-list-of-sequential-dates-aa1c0fa7-c76a-4762-8bc9-46f1691defec
然后在第一个日期旁边尝试这个公式并填充(将A2
调整到第一个日期的单元格,并将quarterly!A:B
调整到源范围):
=LOOKUP( DATE(YEAR(A2), INT((MONTH(A2) - 1) / 3) + 2, 0), quarterly!A:B)