VBA代码问题从数据列创建Pivot

问题描述 投票:2回答:1

我有一列数据。我有一个带有Commandbutton的userform,它应该从数据列创建一个数据透视表。

希望的结果是创建一个数据透视表,它计算每个数字在数据列中出现的次数。但是,我的代码只显示所有数字的计数(即数据行数)。

有人可以帮我,告诉我哪里出错了?

所需的输出是两列,第一列是列出每个数字的行标签,第二列是这些数字的计数,显示每个列出现的次数。


     Dim PSheet As Worksheet
     Dim DSheet As Worksheet
     Dim LastRow As Long
     Dim LastCol As Long
     Dim PRange As Range
     Dim PCache As PivotCache
     Dim PTable As PivotTable

     Sheets.Add
     ActiveSheet.Name = "Pivottable"

    Set PSheet = Worksheets("Pivottable")
    Set DSheet = Worksheets("Sheet1")

    LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
    LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    Set PRange = DSheet.Range("A1").CurrentRegion

    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

    Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="PRIMEPivotTable")


   With PTable.PivotFields("Calling Number")
        .Orientation = xlColumnField
        .Position = 1

End With

With ActiveSheet.PivotTables("PRIMEPivotTable").PivotFields("Calling Number")
        .Orientation = xlRowField
        .Position = 1

    End With


    PTable.AddDataField PSheet.PivotTables _
        ("PRIMEPivotTable").PivotFields("Calling Number"), "Count of Calling Number", xlCount


End Sub```
excel vba pivot-table
1个回答
0
投票

我相信你已经碰到了一些VBA的挑剔,也有点冗余。

我编辑了你的代码,内容如下:

Sub foo()

    Dim PSheet As Worksheet
    Dim DSheet As Worksheet
    Dim LastRow As Long
    Dim LastCol As Long
    Dim PRange As Range
    Dim PCache As PivotCache
    Dim PTable As PivotTable

    Sheets.Add
    ActiveSheet.Name = "Pivottable"

    Set PSheet = Worksheets("Pivottable")
    Set DSheet = Worksheets("Sheet1")

    LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
    LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    Set PRange = DSheet.Range("A1").CurrentRegion

    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange)

    Set PTable = PCache.CreatePivotTable(TableDestination:=PSheet.Cells(1, 1), TableName:="PRIMEPivotTable")

    PTable.AddDataField PSheet.PivotTables( _
        "PRIMEPivotTable").PivotFields("Calling Number"), "Count of Calling Number", xlCount

    With PTable.PivotFields("Calling Number")
         .Orientation = xlRowField
         .Position = 1
    End With


End Sub

您的代码中的数据透视表上有三个操作。 (1)您将“呼叫号码”添加到列标题中。 (2)在行标题中添加“呼叫号码”。 (3)您向数据字段添加一个主叫号码计数。

你不需要(1)。我们只是在做行标题。此外,由于某些原因,当您在DataFields中使用与PivotFields中相同的字段时,您必须在添加数据字段后添加透视字段。我真的不知道为什么,我承认我偶然发现了它。但运行上面的代码剪断了一些测试数据我得到以下(我认为你正在追求的)

enter image description here enter image description here

希望能帮助到你!

© www.soinside.com 2019 - 2024. All rights reserved.