【问题标题】:How do I get my vba pivot table row data into two columns instead of the same column?如何将我的 vba 数据透视表行数据放入两列而不是同一列?
【发布时间】:2019-06-16 02:07:45
【问题描述】:

我对 excel 中的 VBA 编码相当陌生,我正在尝试使用 VBA 创建一个数据透视表,其中我有人员编号 (Pers.No.) 和员工姓名 (Last name First name) 需要在两个不同的列,因此它们显示在同一行,即我需要每人 1 行数据。

我已经在互联网上搜索修复并尝试了几种不同的方法来解决这个问题,但无论我做什么,它都会在同一列中输出姓名和人员编号

Sub Pivot2Create()

'Declare Variables
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long
Dim wb1 As Workbook


Set wb1 = ThisWorkbook

Application.ScreenUpdating = False
'Insert a New Blank Worksheet
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Second Pivot").Delete
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "Second Pivot"
Application.DisplayAlerts = True
Set PSheet = Worksheets("Second Pivot")
Set DSheet = Worksheets("Current Report")

'Define Data Range
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)

'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="Uniper3rdParty")

'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="Uniper3rdParty")

'Insert Row Fields
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Pers.No.")
    .Orientation = xlRowField
    .RowAxisLayout (xlTabularRow)
    .Position = 1
    End With

    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Last name First name")
    .Orientation = xlRowField
    .RowAxisLayout (xlTabularRow)
    .Position = 2
    End With

'Insert Column Fields
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Wage Type Long Text")
    .Orientation = xlColumnField
    .Position = 1
    End With

'Insert Data Field
    With ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Amount")
    .Orientation = xlDataField
    .NumberFormat = "#,##0.00"
    End With

我不知道我是否完全搞砸了,或者我是否对代码盲目,我只是错过了一些非常简单的东西。任何人都可以提供的任何帮助将不胜感激

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:

    试试下面的

    With Psheet.PivotTables("Uniper3rdParty")
    'What you asked
        .RowAxisLayout xlTabularRow
    'Personally, I would add the below rows but feel free to remove them
        dim pf as PivotField
        For Each pf In .PivotFields
            pf.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
        Next pf
        .ShowDrillIndicators = False
    End With
    

    【讨论】:

    • 非常感谢您抽出宝贵时间为我提供答案,您的解决方案已经奏效,我的理智已经恢复
    • 一点点投票总是值得赞赏的 :) 并将标记为每个人都已解决的问题。
    【解决方案2】:

    使用“Classic Pivot”(并可能删除小计)

    Sub FormatPivot()
        With ActiveSheet.PivotTables("Uniper3rdParty")
            .InGridDropZones = True
            .RowAxisLayout xlTabularRow
        End With
        ActiveSheet.PivotTables("Uniper3rdParty").PivotFields("Pers.No.").Subtotals = _
            Array(False, False, False, False, False, False, False, False, False, False, False, False)
    End Sub
    

    【讨论】:

    • 非常感谢您抽出宝贵的时间回复我,但是您的回复确实有效,因此我不必包含单独的子项,而我提供的另一个答案是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2021-01-23
    相关资源
    最近更新 更多