用于具有dynamic数据范围的数据透视表的Excel VBAmacros

代码工作! 谢谢您的帮助!

我正在试图创build一个dynamic的数据透视表,将工作的行数变化的数据。 目前,我有28300行,但这可能会每天更改。

数据格式举例如下:

Case Number Branch Driver 1342 NYC Bob 4532 PHL Jim 7391 CIN John 8251 SAN John 7211 SAN Mary 9121 CLE John 7424 CIN John 

成品表的例子:

 Driver NYC PHL CIN SAN CLE Bob 1 0 0 0 0 Jim 0 1 0 0 0 John 0 0 2 1 1 Mary 0 0 0 1 0 

代码如下:

 Sub CreateSummaryReportUsingPivot() ' Use a Pivot Table to create a static summary report ' with model going down the rows and regions across Dim WSD As Worksheet Dim PTCache As PivotCache Dim PT As PivotTable Dim PRange As Range Dim FinalRow As Long Dim FinalCol As Long Set WSD = Worksheets("PivotTable") 'Name active worksheet as "PivotTable" ActiveSheet.Name = "PivotTable" ' Delete any prior pivot tables For Each PT In WSD.PivotTables PT.TableRange2.Clear Next PT ' Define input area and set up a Pivot Cache FinalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row FinalCol = WSD.Cells(1, Application.Columns.Count). _ End(xlToLeft).Column Set PRange = WSD.Cells(1, 1).Resize(FinalRow, FinalCol) Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:= _ xlDatabase, SourceData:=PRange) ' Create the Pivot Table from the Pivot Cache Set PT = PTCache.CreatePivotTable(TableDestination:=WSD. _ Cells(2, FinalCol + 2), TableName:="PivotTable1") ' Turn off updating while building the table PT.ManualUpdate = True ' Set up the row fields PT.AddFields RowFields:="Driver", ColumnFields:="Branch" ' Set up the data fields With PT.PivotFields("Case Number") .Orientation = xlDataField .Function = xlCount .Position = 1 End With With PT .ColumnGrand = False .RowGrand = False .NullString = "0" End With ' Calc the pivot table PT.ManualUpdate = False PT.ManualUpdate = True End Sub 

任何你使用VBA的原因,而不是变化的行数?

如果您使用Excel 2007/2010,请从原始数据创build常规表/列表(Ctrl-L)。 你也可以给它一个名字。 然后创build一个数据透视表并使用表名作为数据源。 在添加行时,表格将展开,然后您可以刷新数据透视表(F5或使用VBA)。

如果您在Excel 2003中,也可以创builddynamic命名范围。 它稍微复杂一些(而且更难看),但是如果你被困在一个较老的版本上,我可以引导你。

他们改变了PivotCaches的对象模型。 您需要在2007 – 2010年(使用VBA版本7,而不是版本6)的方法是

  PivotCaches.Create