我有一列数据。我有一个带有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```
我相信你已经碰到了一些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中相同的字段时,您必须在添加数据字段后添加透视字段。我真的不知道为什么,我承认我偶然发现了它。但运行上面的代码剪断了一些测试数据我得到以下(我认为你正在追求的)
希望能帮助到你!