如何为数据透视表动态选择数据范围

时间:2016-02-04 15:53:51

标签: vba excel-vba excel

我已经详尽地搜索了这个主题但是我正在努力寻找适用于我的宏的解决方案。我需要数据透视表的源数据,以包括工作表上的所有行(包含数据)。行数将每天更改。

这是我到目前为止所得到的:

    Sheets("Sheet1").Select
    Sheets("Sheet1").Name = "RAW_DATA"
    Range("A1").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "RAW_DATA!R1C1:R159C24", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="Sheet4!R3C1", TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion14
    Sheets("Sheet4").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Asset")
        .Orientation = xlRowField
        .Position = 1
    End With

表示我的数据透视表源数据的值为RAW_DATA!R1C1:R159C24。问题是我需要根据填充的源数据范围的大小动态增加或减少此范围。

2 个答案:

答案 0 :(得分:2)

首先,您可以通过将列设置为数据范围(例如RAW_DATA!$ A:$ X)轻松解决问题。 附加数据后,对数据透视表的简单更新将包含新数据或排除不再存在的数据。

那就是说,这是一个VBA解决方案: 此示例将Sheet1上的PivotTable1的源数据更改为“RAW_DATA!$ A $ 1:$ X $,无论最后一行是什么”

Sub ChangePivotData()
Dim lastrow as double

lastrow = Worksheets("RAW_DATA").Range("A" & Rows.Count).End(xlUp).Row

With Worksheets("Sheet1").PivotTables("PivotTable1")
    .ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:="RAW_DATA!A2:X" & CStr(lastrow), _    
        Version:=xlPivotTableVersion14)
End With
End Sub

这是它的核心。但是,您可能需要检查空白列标题以执行一些错误预防,在设置新缓存后自动刷新表等。

这里可以找到更广泛的例子: http://www.thespreadsheetguru.com/the-code-vault/2014/7/9/change-a-pivot-tables-data-source-range

享受:)

答案 1 :(得分:0)

如果您的数据是表单中的唯一内容,则可以使用以下内容

Worksheets("RAW_DATA").Usedrange

和相应的范围地址

Worksheets("RAW_DATA").Usedrange.Address

希望这有帮助