将季度数据与日常数据相匹配

问题描述 投票:0回答:3

鉴于一些看起来像这样的数据:

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中轻松完成?

excel
3个回答
1
投票

通过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

1
投票

要生成日期,请输入并选择第一个日期,然后选择主页选项卡 - >编辑 - >填充 - >系列... 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)

1
投票

这是我的帮助列的意思 - 非常基本,但确实有效

enter image description here

在C2中

=DATE(YEAR(A2),MONTH(A2)*3-2,1)

在D2

=EOMONTH(C2,2)

在E2

=D2-C2+1

在G2

=IF(G1="",1,IF(COUNTIF($G$1:G1,G1)<INDEX($A$2:$E$10,G1,5),G1,G1+1))

在H2

=IF(G1=G2,H1+1,INDEX($A$2:$E$10,G2,3))

在I2

=INDEX($A$2:$E$10,G2,2)

因此,列G包含91 1的91 2的92 3等,并用于索引回原始数据。

© www.soinside.com 2019 - 2024. All rights reserved.