0

如果您设置了数据透视表并单击字段的下拉菜单,并查看显示的值过滤器部分,我希望并希望它按字母顺序显示。例如,如果该字段是州,我会在其中显示密苏里州、俄克拉荷马州……这使得我很难找到我要查找的内容。或者,想象一个日期字段,当您尝试过滤时,日期是完全随机的。

我已经用谷歌搜索了如何按字母顺序排列这个列表,发现大多数解决方案并不理想,也就是说,可能不存在任何内置到 Excel 中的好方法。我正在寻找解决方案,尤其是那些涉及 VBA 的解决方案,因为我有许多数据透视表,其中一些具有许多不同的字段,我想修复它们。手动操作只是少数人的选择,如果这是唯一的选择的话。

为了清楚起见,我不是在谈论对数据透视表本身进行排序。我知道该怎么做。我说的是对下拉列表的值过滤器部分中的值进行排序,以便我可以轻松地将我的数据透视表过滤到我关心的特定类别。

我正在使用 Excel 2007。

4

2 回答 2

1

事实证明,当一个字段在过滤器中时,你不能对它做任何事情。但是,当项目在行中时,您可以对其进行排序。因此,一种解决方案是将某些内容从过滤器移至行,然后排序,然后将其移回过滤器。如果你有一些这些事情要做,这没关系。但是,即使这样,如果您附近有任何其他单元格的数据一旦数据透视表更改大小就会被覆盖,那么手动执行此操作非常困难。

但是,使用 VBA,您可以对字段进行排序,即使它们位于数据透视表的字段部分!

For Each ws In ThisWorkbook.Worksheets
    For Each pt In ws.PivotTables

        pt.ManualUpdate = True

        For Each pf In pt.PivotFields
            pf.AutoSort xlAscending, pf.Name
        Next pf

        pt.ManualUpdate = False

    Next pt

Next ws
于 2013-06-11T19:41:23.627 回答
0

OP 有点晚了,但这对我很有用.. 继 GeoffDS 之后,如果您只想对数据透视表的“过滤器”部分中的字段进行排序,您可以添加一个 if 语句以将排序限制为具有“xlPageField”的 pf.orientation。使用 SourceName 而不是 Name 进行排序也更安全,因为 Sourcename 是固定的,但用户可以更改 Name 导致例程崩溃。

其他 pf.Orientations 是用于已使用字段的 xlRowField、xlColumnField、xlDataField 和用于未使用字段的 xlHidden。

For Each ws In ThisWorkbook.Worksheets
    For Each pt In ws.PivotTables

        pt.ManualUpdate = True

        For Each pf In pt.PivotFields
           If pf.Orientation = xlPageField then

              pf.AutoSort xlAscending, pf.SourceName

           End If
        Next pf

        pt.ManualUpdate = False

    Next pt

Next ws
于 2021-01-27T15:23:02.907 回答