使用VBA对excel 2007 pivot表按最后一列降序排序

时间:2011-06-29 13:16:46

标签: excel sorting vba pivot

谢谢你们!我想我可能已经解释了我的问题有点模糊。我附加了两个打印屏幕,以说明我的问题。

打印屏幕:http://imageshack.us/photo/my-images/804/illustrasjon.jpg

由于生产线上的特定原因,我的数据透视表显示停止[分钟]。本周的“总计”列(生产天数变化)是我希望关注的,以便将改进工作分配到正确的地方。排序将由我以外的其他人每天进行,他们真的应该有按钮而不是通过选项栏进行排序。

NB! “Sum”列不是数据透视表的一部分。这只是计算固定列的“Totalt”列,以便生成排序结果的扇形图,因为无法从“Totalt”列创建数据透视表。

'Målperdag'列只是每日(分钟)目标,我希望在此期间保持指定原因的生产停止,因此这应该保持在'Totalt'列之外,但这不太重要


我有一个透视表,按周显示,显示从1到5的任意天数。因此,总计天数值的右侧总列“正在移动”,这就是为什么我不能简单地记录宏。我想创建一个宏,根据总列对枢轴表进行排序。

我不会说VBA的国际语言,但想象一下这对于那些做过的人来说相当容易。

非常感谢愿意为我编写代码的人!

祝你好运, 汉斯

2 个答案:

答案 0 :(得分:3)

汉斯

首先,您应该使用数据透视表上的内置排序功能,如下面的屏幕截图所示。

enter image description here

选择您要排序的列:

enter image description here

这对您来说可能有点问题,因为数据更改时数据透视表不会自动刷新。如果您希望它实时更新,那么您需要将“Worksheet_Change”事件处理程序添加到VBA代码中。要执行此操作,请按Alt + F11以显示VBA,并在包含源数据的工作表上输入以下内容:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    PivotTables("PivotTable1").RefreshTable
    Application.EnableEvents = True
End Sub

此处“PivotTable1”将更改为匹配数据透视表的名称。选择数据透视表后,此名称将显示在功能区中。

enter image description here

现在,当您更改数据时,表格将自动重新排序。

enter image description here

答案 1 :(得分:0)

汉斯,欢迎来到SO。您没有在标记中指定Excel的哪个版本,但这里有一些Excel 2007解决方案。

没有VBA就可以(而且很有帮助!)这样做。您可能对此Microsoft solution感兴趣。

我建议您使用总计选择数据透视表的范围,排除标题和总计,然后转到数据选项卡并选择排序Z-> A。这将按降序对总计进行排序(当然,将标题更改为左侧)。

如果您想定期执行此操作,您也可以录制宏来执行此操作,但这可能比实际值更麻烦。