何千ものエントリを含むテーブルから派生したかなり大きなフィルター テーブルがあります。これは、故障診断とシステムの可用性の評価に計算値を使用します。
ピボット テーブルの値をフィルター処理して、最も重要なエラーのみを表示しようとしています。フィルタリングしようとしているフィールドには浮動小数点値が含まれています。意図は、指定された値を超える数値を持つエントリのみが表示されることです (> 0.01 としましょう)。
コードは次のとおりです。
Sub FilterPivotTable(pvtName As String, pvtField As String, rngMin As String)
' pvtName = name of pivot table
' pvtField = pivot table field to filter
' rngMin = range name containing the minimum value to filter on
Dim pvtItem As PivotItem
Dim vMin As Double
Dim x As Double
vMin = Range(rngMin).Value
With ActiveSheet.PivotTables(pvtName).PivotFields(pvtField)
.ShowAllItems = True
For Each pvtItem In .PivotItems
x = CDbl(pvtItem.Name)
pvtItem.Visible = (x >= vMin)
Next
End With
' Change the cache setting
ActiveSheet.PivotTables(pvtName).PivotCache.MissingItemsLimit = xlMissingItemsNone
ActiveSheet.PivotTables(pvtName).PivotCache.Refresh
End Sub
ルーチンは正しく実行され、制限未満の値を非表示にします...ただし、フィルター リストに重複する値がある場合を除きます! この場合、最初の値はチェックされていませんが、他の値はチェックされたままです。
マクロをステップ実行すると、名前の文字列値と x の値がローカル変数に正しく表示されていることがわかりますが、Excel は実際にどの pvtItem を見ているのかを認識していないようです。重複したアイテムは、行 pvtItem.Visible = (x >= vMin) でアクションが実行される前に既に状態 Visible = False を持っており、Excel は実際のアイテムではなく、その名前のリストの最初の値を単に非表示にしているようです。
私の問題は、リストに同じ名前のアイテムが複数あることです。重複した名前を削除できますか?
写真を投稿する「評判」はありませんが、ドロップダウン フィルター リストには次のようなエントリの例が含まれています。
[ ] 0.0000125385802469136
[ ] 5.78703703703704E-06
[x] 5.78703703703704E-06
[ ] 0.0000326554232804233
[ ] 6.61375661375661E-06
[x] 6.61375661375661E-06
[x] 0.0000132275132275132
[ ] 1.65343915343915E-06
[x] 1.65343915343915E-06
etc.
たとえば、pvtItem.Name (文字列) は、2 番目と 3 番目のアイテム、5 番目と 6 番目のアイテム、8 番目と 9 番目のアイテムなどで同じです。ソース テーブルの生データを調べたところ、実際の値も表示される最大値と同じです。小数点を含めて30桁。
ご協力ありがとうございます。