【问题标题】:VBA and Pivot Tables: getting two data fieldsVBA 和数据透视表:获取两个数据字段
【发布时间】:2013-10-25 08:46:39
【问题描述】:

我正在尝试使用 vba 从名为 DATA 的工作表中的数据创建数据透视表。被组织在许多列中,其中三列分别称为 NOM、NOM_MOVE 和 COMMENT。

我希望数据透视表具有以下字段:列标签字段 = Sum(Values),行标签字段 = COMMENT,值字段 = NOM 总和,NOM_MOVE 总和

但是,我编写的代码不起作用或提供正确的字段(即使使用 pivottablewizard 和 cache/createpivottable 以不同的形式。

在我无法分配正确字段之前,我的代码是:

Sub CreatePivot()
' Create the 5 summary pivot tables using the TRADE_LIST sheet as data
Dim pivot1 As Worksheet
Dim datasheet As Worksheet
Dim dataCache As PivotCache
Dim PVT As PivotTable
Dim LastRow As Long
Dim LastCol As Long
Dim dataSource As Range
Dim PVTdest As Range

Set datasheet = Sheets("DATA")
Set pivot1 = Sheets("PIVOT")

' (1) Source data from the TRADE_LIST sheet and create a pivot cache from source data                     to use for each pivot table

LastRow = datasheet.Cells(1, 1).End(xlDown).Row
LastCol = datasheet.Cells(1, 1).End(xlToRight).Column
Set dataSource = datasheet.Cells(1, 1).Resize(LastRow, LastCol)

Set dataCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=dataSource)

' (2) Create a pivot table
Set PVTdest = pivot1.Cells(2, 2)
Set PVT = dataCache.CreatePivotTable(tabledestination:=PVTdest,              tablename:="Comment_Sums")

...

非常感谢任何帮助

【问题讨论】:

    标签: vba excel pivot-table


    【解决方案1】:

    我对你的代码做了一些修改,所以试试这个:

    Sub CreatePivot()
    ' Create the 5 summary pivot tables using the TRADE_LIST sheet as data
    Dim LastRow, LastCol As Long
    Dim dataSource, destination As String
    Dim wb As Workbook
    Dim data_sheet, pivot1 As Worksheet
    
    Set wb = ThisWorkbook
    Set data_sheet = wb.Sheets("DATA") 'in your code, you forgot to include WB
    Set pivot1 = wb.Sheets("PIVOT")
    
    ' (1) Source data from the TRADE_LIST sheet and create a pivot cache from source data _
      to use for each pivot table
    
    'i changed this part to cover all data 
    LastRow = data_sheet.Cells(data_sheet.Rows.Count, 1).End(xlUp).Row
    LastCol = data_sheet.Cells(1, data_sheet.Columns.Count).End(xlToLeft).Column
    
    'PivotCache creation requires arguments in string format, no need to use Set
    dataSource = data_sheet.Name & "!" & data_sheet.Cells(1, 1).Resize(LastRow, LastCol).Address(ReferenceStyle:=xlR1C1)
    destination = pivot1.Name & "!" & pivot1.Range("A1").Address(ReferenceStyle:=xlR1C1)
    
    'here we use the datasource and destination
    wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        dataSource, Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:=destination, TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion12
    
    'after creating pivot, add the Row Field
    With pivot1.PivotTables("PivotTable1").PivotFields("Comment")
        .Orientation = xlRowField
        .Position = 1
    End With
    
    'then add the column fields
    With pivot1
        .PivotTables("PivotTable1").AddDataField .PivotTables( _
            "PivotTable1").PivotFields("NOM"), "Sum of NOM", xlSum
        .PivotTables("PivotTable1").AddDataField .PivotTables( _
            "PivotTable1").PivotFields("NOM_MOVE"), "Sum of NOM_MOVE", xlSum
    End With
    
    End Sub
    

    希望这能让你开始。

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 2021-12-06
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多