Я полагаю, что вы столкнулись с некоторой проницательностью 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) вы добавляете 'Calling Number' в заголовки столбцов. (2) вы добавляете 'Calling Number' в заголовки строк. (3) вы добавляете количество вызывающих номеров в поля данных.
Тебе не нужно (1). Мы просто делаем заголовки строк. Кроме того, по какой-то причине, когда вы используете то же поле в DataFields, что и в PivotFields, вы должны добавить поля сводки ПОСЛЕ добавления полей данных. Я действительно не знаю почему, я признаю, что наткнулся на это случайно. Но, запустив приведенный выше код, пропустив некоторые тестовые данные, я получаю следующее (что, я думаю, то, что вы ищете)
Надеюсь, это поможет!