我已经详尽地搜索了这个主题但是我正在努力寻找适用于我的宏的解决方案。我需要数据透视表的源数据,以包括工作表上的所有行(包含数据)。行数将每天更改。
这是我到目前为止所得到的:
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
。问题是我需要根据填充的源数据范围的大小动态增加或减少此范围。
答案 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
希望这有帮助