1

これらの行の値の並べ替えに基づいて、ピボット テーブル内のアイテムをグループ化しようとしています。このデータに基づいてパレート図を作成しようとしています。ここSOとGoogleでいくつかの質問を調べましたが、多くの助けを見つけることができませんでした...残念ながら、これはそれほど一般的な問題ではないようです。

元のピボット

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

ソートされたピボット

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 でピボットの並べ替え/グループ化を行ったことはありません (ただし、これを手動で行うのはかなり簡単です)。そのため、マクロの記録から始めました。最初に並べ替えを適用する方法を見つけましたが、グループ化しようとすると、次のようになりました。

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
4

2 に答える 2

1

私はこれがそれをすると信じています:

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
于 2013-01-25T16:05:10.120 に答える
0

私は自分でこれを解決したと信じています-リファクタリングする必要があります。

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    
于 2013-01-25T16:19:24.867 に答える