excel - 使用 VBA 代码从数据列创建 Pivot 的问题
问题描述
我有一列数据。我有一个带有命令按钮的用户窗体,它应该从数据列创建一个数据透视表。
期望的结果是创建一个数据透视表,该表计算每个数字在数据列中出现的次数。但是,我的代码只显示了所有数字的计数(即数据行数)。
有人可以帮助我并告诉我哪里出错了吗?
所需的输出是两列,第一列是列出每个数字的行标签,第二列是这些数字的计数,显示每个数字出现的次数。
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 中相同的字段时,您必须在添加数据字段之后添加数据透视字段。我真的不知道为什么,我承认我偶然发现了它。但是在一些测试数据上运行上面的代码片段我得到以下(我认为这是你所追求的)
希望能帮助到你!
推荐阅读
- ruby-on-rails - 实验室计算机预约数据库设计
- python - 如何在 BeautifulSoup Python 中解析来自 csv 的 url
- enums - Microsoft Botframework 自定义枚举
- android - 旧版本的安全补丁在哪里?
- mongodb - MongoDb:直接查询不起作用
- java - JBoss EAP6 - 无法创建 JDBC 数据源 (Microsoft SQL Server)
- c# - 如何通过单击 C# 中的按钮来隐藏和显示面板
- marklogic - 如何避免在尝试获取开发人员许可证时出错?
- javascript - 将多个参数从子道具传递给父方法
- sorting - 根据长度对Jinja2中的列表进行排序