枢轴,动态数据源

时间:2019-01-17 19:48:01

标签: excel vba

我有一个数据透视图,当前具有引用我表的数据源。

每周我都运行代码,并将新的一行数据附加到表的底部。

数据透视表确实会引用该表,因此每周都会收集一次此新数据,但是,我希望每周减少一周的时间,因此我拥有一年的数据。所以我想在行周围添加。

是否有必要将表格调整为仅包含价值几年的行?

这是我的示例数据:

+----------+------------------+-----------------+
|   week   |      stack       |    overflow     |
+----------+------------------+-----------------+
| 12/20/17 | -142,335,432.00  | -41,641,109.88  |
| 12/27/17 | -105,428,220.20  | -47,448,990.63  |
| 1/3/18   |  -88,520,154.56  | -24,858,774.97  |
| 1/10/18  |  -42,033,431.10  |  14,573,779.35  |
| 1/17/18  |  -66,101,748.16  |  -8,670,735.22  |
| 1/24/18  |  -75,871,649.12  | -18,000,154.21  |
| 1/31/18  |  -77,027,686.63  | -11,784,198.64  |
| 2/7/18   |  -96,720,126.71  | -52,219,288.98  |
| 2/14/18  | -119,118,554.60  | -34,743,350.28  |
| 2/21/18  | -116,529,554.70  | -20,774,072.93  |
| 2/28/18  |  -86,871,998.53  | -25,993,521.20  |
| 3/7/18   |  -90,351,387.27  | -21,259,727.05  |
| 3/14/18  |  -77,968,076.28  | -51,609,924.29  |
| 3/21/18  | -120,805,352.60  | -40,338,490.97  |
| 3/28/18  |  -92,247,583.62  | -14,525,648.04  |
| 4/4/18   |  -70,821,451.36  | -35,866,864.46  |
| 4/11/18  |  -82,694,486.66  | -59,009,729.82  |
| 4/18/18  |  -79,034,094.39  | -64,231,312.42  |
| 4/25/18  |  -63,415,815.16  | -28,612,265.37  |
| 5/2/18   |  -80,372,191.96  | -53,375,611.61  |
| 5/9/18   |  -72,619,415.73  | -50,642,469.19  |
| 5/16/18  | -109,654,240.70  | -45,762,784.43  |
| 5/23/18  | -100,407,366.50  | -39,577,966.11  |
| 5/30/18  | -105,794,095.80  | -65,071,199.59  |
| 6/6/18   |  -83,630,201.98  | -60,981,969.88  |
| 6/13/18  | -104,644,821.50  | -63,754,760.71  |
| 6/20/18  |  -75,229,424.33  | -55,803,681.24  |
| 6/27/18  |  -65,237,135.62  | -54,693,832.65  |
| 7/4/18   |  -60,025,672.33  | -44,367,918.60  |
| 7/11/18  |  -30,172,175.09  | -28,392,163.28  |
| 7/18/18  |  -20,687,864.39  |  24,300,285.63  |
| 7/25/18  |  -40,476,447.03  |   4,850,881.09  |
| 8/1/18   |  -31,211,625.05  | -67,887,918.30  |
| 8/8/18   |  -29,736,938.87  | -32,905,703.80  |
| 8/15/18  |  -74,934,647.91  | -65,611,884.73  |
| 8/22/18  |  -25,220,747.20  |  -7,019,746.86  |
| 8/29/18  |  -24,608,552.13  |  -8,065,633.97  |
| 9/5/18   |  -30,119,599.95  | -26,225,633.08  |
| 9/12/18  |  -29,836,379.12  | -10,045,560.95  |
| 9/19/18  |  -61,281,567.61  | -58,427,878.27  |
| 9/26/18  |  -47,418,209.59  | -33,451,409.22  |
| 10/3/18  |  -41,321,336.46  | -25,112,764.44  |
| 10/10/18 |   -1,241,932.51  |  21,814,274.35  |
| 10/17/18 |  -19,791,273.66  | -12,199,449.75  |
| 10/24/18 |  -20,501,406.84  |   1,225,387.11  |
| 10/31/18 |  -64,116,464.30  |  -5,308,628.21  |
| 11/7/18  |  -83,657,672.02  | -19,922,992.91  |
| 11/14/18 | -112,704,007.53  | -32,939,535.69  |
| 11/21/18 |  -71,969,954.54  | -51,335,709.79  |
| 11/28/18 |  -79,668,484.56  | -67,887,918.30  |
| 12/5/18  |  -44,134,343.99  | -32,905,703.80  |
| 12/12/18 |  -71,700,079.84  | -65,611,884.73  |
| 12/19/18 |  -82,238,011.30  | -74,725,620.20  |
| 12/26/18 |  -59,385,932.41  | -54,947,256.94  |
| 1/2/19   |  -42,717,830.26  | -31,110,199.14  |
| 1/9/19   |  -11,029,444.63  |   7,309,440.90  |
+----------+------------------+-----------------+

2 个答案:

答案 0 :(得分:1)

更改数据透视表的源范围将非常棘手,因为Excel不允许在数据透视表中使用非连续的单元格。相反,您可以通过选择整个列来创建枢轴,以说明将来的所有条目。 然后可以操纵枢轴以显示变化的范围,如下面的代码所示。 希望对您有用。

编辑

下面更新了代码,从底部开始包含50(可以更改)。

Sub MovingPivot()
    Dim ws As Worksheet
    Dim dtTop As Date
    Dim i As Integer, n As Long

    Const NumWeeks = 50 'Change this to set weeks range


    Set ws = ActiveSheet 'Set reference to your worksheet here

    'reset the pivot filters
    ws.PivotTables("Table1").PivotFields("Date").ClearAllFilters
    'remove blank values
    ws.PivotTables("Table1").PivotFields("Date").PivotItems("(blank)").Visible = False


    'find the date entry in 50 places from bottom.
    i = 0
    For n = ws.PivotTables("Table1").RowRange.Count To 1 Step -1
        If i = NumWeeks Then
            dtTop = ws.PivotTables("Table1").RowRange.Cells(n).Value
            Exit For
        End If
        i = i + 1
    Next n

    ws.PivotTables("Table1").PivotFields("Date").PivotFilters.Add2 Type:=xlAfterOrEqualTo, Value1:=Format(dtTop, "dd-mmm-yyyy")
End Sub

答案 1 :(得分:0)

如果要继续使用数据透视图,则可以使用时间线切片器包括/排除数据。刷新数据后,您需要调整时间线或手动进行过滤。或编写VBA来设置过滤器。

也可以使用标准图表(而不是数据透视图)来实现不需要切片器的非vba版本。使用偏移功能创建命名范围,该功能仅捕获您感兴趣的数据行,然后将这些范围名称插入标准图表。当向表中添加新数据时,用于标准图表的命名范围也将被更新。

如果需要逐步操作,请查看https://peltiertech.com/Excel/Charts/DynamicLast12.html

相关问题