Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA按最后一列降序排列excel 2007数据透视表_Excel_Sorting_Vba_Pivot - Fatal编程技术网

使用VBA按最后一列降序排列excel 2007数据透视表

使用VBA按最后一列降序排列excel 2007数据透视表,excel,sorting,vba,pivot,Excel,Sorting,Vba,Pivot,谢谢大家!我想我可能对我的问题解释得有点模糊。为了说明我的问题,我附加了两个打印屏幕 打印屏幕: 我的数据透视表显示生产线上由于特定原因而停止的时间[分钟]。为了将改进工作分配到正确的位置,我希望重点关注一周的“Totalt”列(其中生产天数不同)。排序将由我以外的其他人每天执行,他们确实应该有一个按钮按下,而不是通过选项栏进行排序 注意!“Sum”列不是透视表的一部分。这只是将“Totalt”列计算为固定列,以便生成排序结果的扇区图,因为无法从“Totalt”列生成透视图 “Mål per d

谢谢大家!我想我可能对我的问题解释得有点模糊。为了说明我的问题,我附加了两个打印屏幕

打印屏幕:

我的数据透视表显示生产线上由于特定原因而停止的时间[分钟]。为了将改进工作分配到正确的位置,我希望重点关注一周的“Totalt”列(其中生产天数不同)。排序将由我以外的其他人每天执行,他们确实应该有一个按钮按下,而不是通过选项栏进行排序

注意!“Sum”列不是透视表的一部分。这只是将“Totalt”列计算为固定列,以便生成排序结果的扇区图,因为无法从“Totalt”列生成透视图

“Mål per dag”列只是我希望保持特定原因的生产停止的每日(分钟)目标,因此应该将其排除在“Totalt”列之外,但这不太重要


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

我不会说VBA的国际语言,但我认为这对那些会说VBA的人来说是相当容易的

非常感谢任何愿意为我写代码的人

致以最良好的祝愿,
汉斯

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

在没有VBA的情况下实现这一点是可能的(也是有帮助的!)。你可能对此感兴趣

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


如果您想定期执行此排序,也可以录制宏来执行此操作,但这可能会带来更多麻烦。

汉斯,欢迎使用。您没有在标记中指定Excel的版本,但下面是一些Excel 2007解决方案

在没有VBA的情况下实现这一点是可能的(也是有帮助的!)。你可能对此感兴趣

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

如果希望定期执行此排序,也可以录制宏来执行此操作,但这可能会带来更多麻烦。

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

选择要按其排序的列:

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

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    PivotTables("PivotTable1").RefreshTable
    Application.EnableEvents = True
End Sub
这里的“数据透视表1”将更改为匹配数据透视表的任何名称。选定透视表后,此名称将显示在功能区中

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

汉斯

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

选择要按其排序的列:

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

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    PivotTables("PivotTable1").RefreshTable
    Application.EnableEvents = True
End Sub
这里的“数据透视表1”将更改为匹配数据透视表的任何名称。选定透视表后,此名称将显示在功能区中

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


谢谢大家!我刚刚更新了我的帖子,对我的问题做了更详细的解释。对不起,如果我在你们的回答中忽略了什么。谢谢大家!我刚刚更新了我的帖子,对我的问题做了更详细的解释。抱歉,如果我在你的回答中忽略了什么。汉斯,请回顾我的解决方案。它不要求用户使用透视表,只要求您对其正确排序一次。保存该设置,然后每次值更改时,透视表都会自动使用我的代码重新排序。试试看,如果有什么不清楚的地方请告诉我。汉斯,请检查我的解决方案。它不要求用户使用透视表,只要求您对其正确排序一次。保存该设置,然后每次值更改时,透视表都会自动使用我的代码重新排序。试试看,如果有什么不清楚的地方就告诉我。