gpt4 book ai didi

excel - 使用 VBA 代码从数据列创建 Pivot 的问题

转载 作者:行者123 更新时间:2023-12-04 20:52:25 25 4
gpt4 key购买 nike

我有一列数据。我有一个带有命令按钮的用户窗体,它应该从数据列创建一个数据透视表。

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

有人可以帮助我并告诉我哪里出错了吗?

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


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```

最佳答案

我相信您已经遇到了一些 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

希望能帮助到你!

关于excel - 使用 VBA 代码从数据列创建 Pivot 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55536549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com