
ピボット テーブル (Excel 2010) があります。データを更新してリフレッシュするたびに、ピボット テーブルの並べ替えとフィルターがそれぞれ失われるため、フィルターを明示的に変更する必要があります (すべて選択し、不要なものを削除します)。
これに対する解決策はありますか?
- ピボット テーブルが更新されたときに、VBA を通じてフィルターを変更するにはどうすればよいですか?
- ピボット テーブルが更新されたときに、VBA を使用して並べ替えを変更するにはどうすればよいですか?
- データが変更されたときにピボット テーブルの更新をトリガーするにはどうすればよいですか?
よろしくお願いします。マーク
答え1
望んでいたことを実現できました。まず、どのオブジェクトにどうアクセスする必要があるかの詳細を確認するために、マクロを記録しました。その後、最適化を行って完成させました。以下のコード抜粋を参照してください。他の人の役に立つかもしれません。
順序付けに関しては、元のデータ テーブルに別の列「並べ替え順序」を割り当て、それをピボット テーブルで非表示の列として使用して、そのフィールドを使用して並べ替え順序を定義できるようにするというヒントをフォーラムで見つけました。これは、後でデータを変更しても失われません。
Sub Macro1()
On Error GoTo Fehler
Application.ScreenUpdating = False
With ActiveWorkbook.Sheets("Rating").PivotTables(1)
.PivotFields("OWASP 2010").ClearAllFilters
With .PivotFields("OWASP 2010")
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
' uncomment this sectin in case you liek to change the sorting via vba
' 1. sort first the stuff automatically A-Z
'.AutoSort xlAscending, "OWASP 2010"
' 2. move empty values to the end
'If .PivotItems(" ").Position <> .PivotItems.Count - 1 Then
' .PivotItems(" ").Position = .PivotItems.Count - 1
'End If
End With
.PivotFields("Categories").ClearAllFilters
With .PivotFields("Fortify Categories")
If .PivotItems("0").Visible = True Then
.PivotItems("0").Visible = False
End If
If .PivotItems("(blank)").Visible = True Then
.PivotItems("(blank)").Visible = False
End If
End With
End With
Application.ScreenUpdating = True
Exit Sub
Fehler:
Application.ScreenUpdating = True
End Sub
マークより