Excel自定义列表对数据透视表的数据透视字段(列)进行排序

时间:2020-05-25 00:44:41

标签: excel vba

我目前正在基于自定义列表(选项->高级->常规->编辑自定义列表)更新表,但是,我希望该列表自动更新当范围改变时。

即:

添加了范围A1:A20中的自定义列表,因此,如果我更改项目的顺序,则排序应该是自动的。

根据研究,您似乎只能删除自定义列表,然后添加一个新的自定义列表,如下所示:

Application.AddCustomList ListArray:=Range("Sheet1!A1:A20")

我想使用自定义列表来比较提供者,因此,我几乎有一个数据透视表,并且我想按从左到右的特定顺序获取提供者,例如:提供者A,提供者B,提供者C,提供者D(那时将提供者A与其他提供者进行比较),但是我想比较提供者D,列表将像这样:提供者D,提供者A,提供者B,提供者C,依此类推。

关于替代品有什么想法吗?

2 个答案:

答案 0 :(得分:3)

https://support.office.com/en-us/article/sort-data-in-a-pivottable-or-pivotchart-e41f7107-b92d-44ef-861f-24430830450a描述了多种排序数据透视表项的方法

其中之一是拖放列标题:如果您在记录宏的同时这样做,将会得到类似的信息:

ActiveSheet.PivotTables("PivotTable1").PivotFields("Col2").PivotItems("A").Position = 2

您可以遍历列表中的单元格,并使用这些值对列标题进行相应的排序。

例如,这将使您的列标题与M4:M6中的列表同步

Dim pt As PivotTable, pf As PivotField
Dim rngList As Range, i As Long

Set pt = ActiveSheet.PivotTables(1)
Set pf = pt.PivotFields("Col2")

Set rngList = ActiveSheet.Range("M4:M6")

For i = 1 To rngList.Cells.Count
    pf.PivotItems(rngList.Cells(i).Value).Position = i
Next i

enter image description here

答案 1 :(得分:1)

如果您愿意花2分钟的时间,则不需要VBA程序。

假设:在数据表中,您有“提供者”列

假设您首先需要在数据透视表中添加“提供者D”列。

在“数据透视表”工作表中-刷新数据透视表。单击“列标签”左上角的箭头,然后选择“从A到Z”。

选择“提供程序D”列并将其拖动到数据透视表中的第一位置。

Sub Macro3()
Sheets("Pivot").Select
    FirstCol = InputBox("Enter name of the Provider to appear first in the PivotTable Columns", _
    "First Column Select", "Provider A")

    ActiveSheet.PivotTables("PivotTable1").PivotFields("Provider").AutoSort _
        xlAscending, "Provider"
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Provider").PivotItems( _
        FirstCol).Position = 1
End Sub
相关问题