创build数据透视表时,dynamicselect所有数据

我创build了一个VBAmacros来即时创build数据透视表。 源数据每天都在变化,所以每天都有不同数量的logging。 在macros中,要select的logging数是硬编码的。 有没有办法每天select源表中的所有数据 – 而不是预定义数量的logging

Application.DisplayAlerts = False Call DeleteAllPivotTablesInWorkbook Sheets("ALL").Select If CheckSheet("AllSummary") Then Sheets("AllSummary").Delete End If Sheets.Add.Name = "AllSummary" Application.DisplayAlerts = True Sheets("AllSummary").Select ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "All!R1C1:R26885C47", Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="AllSummary!R3C1", TableName:="PivotTable3", DefaultVersion _ :=xlPivotTableVersion10 Sheets("AllSummary").Select Cells(3, 1).Select 

正如你所看到的,这个sourcdata值是硬编码的。 无论logging数量如何select所有数据?

你也可以使用

 ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "All!" & Sheets("All").Range("A1").CurrentRegion.Address(ReferenceStyle:=xlR1C1), Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="AllSummary!R3C1", TableName:="PivotTable3", DefaultVersion _ :=xlPivotTableVersion10 

或者,如果您将数据保存在不同于数据透视表目标的单独表格中,则可以使用最后一行/列/单元格typesselect来select数据表中的所有相关数据:

 Sub Excel2010Syntax() Sheets("Sheet1").Select ActiveCell.SpecialCells(xlLastCell).Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R16C4", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:="Sheet2!R20C1", TableName:="PivotTable4", DefaultVersion _ :=xlPivotTableVersion14 Sheets("Sheet2").Select Cells(1, 1).Select End Sub 

这是logging在Excel 2010(我认为你有一个更早的版本),但你明白了。 只要有一个专门的数据表,然后select所有的数据来创build您的数据透视表。

编辑:

或者只是运行这个macros:

 Sub Answer() Dim wb As Workbook Dim ws As Worksheet Dim rng1 As Range Set wb = ActiveWorkbook Set ws = wb.Sheets("All") Set rng1 = ws.Cells.Find("*", ws.[a1], xlFormulas, , , xlPrevious) Sheets("AllSummary").Select ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "All!R1C1:R" & CStr(rng1.Row) & "C" & CStr(rng1.Column), Version:=xlPivotTableVersion10).CreatePivotTable _ TableDestination:="AllSummary!R3C1", TableName:="PivotTable3", DefaultVersion _ :=xlPivotTableVersion10 Sheets("AllSummary").Select Cells(3, 1).Select End Sub 

首先,考虑是否应该重新创build数据透视表。 如果您只想更改数据透视表指向的位置,则可以在不删除和创build的情况下执行此操作。

该子查找AllSummary表中的第一个数据透视表,并更改其PivotCache的SourceData属性。 SourceData属性使用Range对象的CurrentRegion属性进行更改。 当你处理数据透视表时,你通常会有非常好的结构化数据,如果是这样的话,CurrentRegion将返回包含任何新行或列的范围。

Address属性使用R1C1,因为这是SourceData所期望的,并且在外部参数中使用True来获取地址中的工作表名称。

 Sub AdjustPtSource() Dim pt As PivotTable With ActiveWorkbook Set pt = .Worksheets("AllSummary").PivotTables(1) pt.PivotCache.SourceData = .Worksheets("All").Range("A1").CurrentRegion.Address(, , xlR1C1, True) End With End Sub 

如果您必须删除并重新创build,您仍然可以使用CurrentRegion获取整个连续的范围。

 Sub MakePT() Dim shSum As Worksheet Dim shAll As Worksheet Dim pc As PivotCache Dim pt As PivotTable Const sWSSUMMARY As String = "AllSummary" DeleteAllPivotTablesInWorkbook Set shAll = ActiveWorkbook.Worksheets("All") If CheckSheet(sWSSUMMARY) Then Sheets(sWSSUMMARY).Delete End If Set shSum = ThisWorkbook.Worksheets.Add shSum.Name = sWSSUMMARY Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, shAll.Range("A1").CurrentRegion) Set pt = pc.CreatePivotTable(shSum.Cells(3, 1)) End Sub