我目前正在基于自定义列表(选项->高级->常规->编辑自定义列表)更新表,但是,我希望该列表自动更新当范围改变时。
即:
添加了范围A1:A20中的自定义列表,因此,如果我更改项目的顺序,则排序应该是自动的。
根据研究,您似乎只能删除自定义列表,然后添加一个新的自定义列表,如下所示:
Application.AddCustomList ListArray:=Range("Sheet1!A1:A20")
我想使用自定义列表来比较提供者,因此,我几乎有一个数据透视表,并且我想按从左到右的特定顺序获取提供者,例如:提供者A,提供者B,提供者C,提供者D(那时将提供者A与其他提供者进行比较),但是我想比较提供者D,列表将像这样:提供者D,提供者A,提供者B,提供者C,依此类推。
关于替代品有什么想法吗?
答案 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
答案 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