使用VBA在Excel中按字母顺序输入Alphatletize值下拉列表

时间:2013-06-11 15:17:29

标签: excel vba excel-vba excel-2007 pivot-table

如果您设置了数据透视表并单击字段的下拉列表,并查看显示的值过滤器部分,我希望并希望按字母顺序显示。例如,如果这个领域是状态,那么我就会向密苏里州,俄克拉荷马州出现......,这使我很难找到我正在寻找的东西。或者,设想一个日期字段,当您尝试过滤时,日期是完全随机的。

我已经搜索了如何将此列表按字母顺序排列,并找到了大多数不理想的解决方案,即可能没有任何好的方法来执行此内置到Excel。我正在寻找解决方案,特别是那些涉及VBA的解决方案,因为我有许多数据透视表,有些具有许多不同的字段,我想修复。如果这是唯一的选择,手动执行此操作只是少数选项。

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

我正在使用Excel 2007。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

OP 有点晚了,但因为这对我有用.. 继 GeoffDS 之后,如果您只想对数据透视表的“过滤器”部分中的字段进行排序,则可以添加 if 语句以将排序限制为 pf.orientation 为“xlPageField”的字段。使用 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