根据一系列值在数据透视表中select/分组顶/底* x *行

我试图根据这些行的值的sorting对数据透视表中的项目进行分组。 我试图根据这些数据build立一个帕累托图。 我在这里看到了很多关于这个和谷歌的问题,但是没有find太多的帮助。不幸的是,这看起来并不是那么普遍的问题。

例如

原始数据透视表

State | Count AK | 14 AL | 76 AR | 40 AZ | 129 CA | 2666 CO | 244 CT | 61 

sorting枢轴

 State | Count CA | 2666 CO | 244 AZ | 129 AL | 76 CT | 61 AR | 40 AK | 14 

分组/最终枢轴

 State | Count CA | 2666 CO | 244 AZ | 129 OTHER | 191 

我以前从来没有在VBA中做过数据透视sorting/分组(但是手工完成这个操作相当简单),所以我开始录制一个macros。 我首先想到了如何应用这种types,但试图给我一些这样的东西:

 ActiveSheet.PivotTables("PT7").PivotSelect _ "State[AL,CT,AR,AK] Original 'NON-AA'", _ xlDataAndLabel + xlFirstRow, True 

问题在于,国家是根据枢纽的价值进行硬编码的。 如果我想在另一组数据上运行这个分组,其中一个不同的状态低于阈值(前3行,而不是实际的count ),则会包含错误的状态。

有没有办法只读取顶部/底部x行的数量,而不需要知道哪些行标签对应的?

我想要这样工作(使用行号而不是标题/标签):

 ActiveSheet.PivotTables("PT7").PivotSelect _ "State[4, 5, 6, 7] Original 'NON-AA'", _ xlDataAndLabel + xlFirstRow, True 

我相信这是事实:

 Sub GroupLowerPivotItems() Dim pt As Excel.PivotTable Dim ptField As Excel.PivotField Dim ptItem As Excel.PivotItem Dim GroupStart As Long Dim FirstCell As Excel.Range Dim LastCell As Excel.Range GroupStart = 4 Set pt = ActiveSheet.PivotTables(1) Set ptField = pt.PivotFields("State") Set ptItem = ptField.PivotItems(GroupStart) Set FirstCell = ptItem.LabelRange Set ptItem = ptField.PivotItems(ptField.PivotItems.Count) Set LastCell = ptItem.LabelRange pt.Parent.Range(FirstCell, LastCell).Group End Sub 

我相信我自己解决了这个问题 – 需要重构。

 Dim iFilterLoop As Integer Dim vValue2List As Variant Dim sValue2List As String vValue2List = ActiveSheet.PivotTables("PT7").RowRange.Value2 sValue2List = "" 'Here's the key step in reading the string values: For iFilterLoop = 4 To ActiveSheet.PivotTables("PT7").RowRange.Count ' Get all but the top 3 -- skip the first (start at 4), since that's the title sValue2List = sValue2List & vValue2List(iFilterLoop, 1) & "," Next iFilterLoop sValue2List = Left(sValue2List, Len(sValue2List) - 1) ActiveSheet.PivotTables("PT7").PivotSelect( _ "State[" & sValue2List & "] Original 'NON-AA'", _ xlDataAndLabel + xlFirstRow, True).Group