Самый простой способ, который я использовал, - это взять столбец в сводной таблице с метками строк.
В моем примере данных у меня есть семь цветов: красный, оранжевый, желтый, зеленый, синийИндиго и Вайолет.Я настроил данные и создал сводную таблицу, затем отфильтровал ее так, чтобы отображались только три цвета:
Таким образом, вы можете получить доступстолбец меток строк в сводной таблице со свойством .RowRange
.Как только вы это сделаете, вы можете уменьшить количество ячеек:
Option Explicit
Public Sub ListVisibleItems()
Dim thisPivot As PivotTable
Set thisPivot = ActiveSheet.PivotTables(1)
Dim rowField As PivotField
Set rowField = thisPivot.RowFields("Color")
Dim theseRows As Range
Set theseRows = thisPivot.RowRange
Dim i As Long
'--- start at 2 to skip the "Row Labels" and end at Count-1
' to skip the "Grand Total"
For i = 2 To theseRows.Count - 1
Debug.Print theseRows.Cells(i, 1) & " is visible"
Next i
End Sub
РЕДАКТИРОВАТЬ: обновленный пример кода для анализа данных примера OP
Option Explicit
Public Sub ListVisibleItems()
Dim thisPivot As PivotTable
Set thisPivot = ActiveSheet.PivotTables(1)
Dim rowField As PivotField
Set rowField = thisPivot.RowFields("Color")
Dim theseRows As Range
Set theseRows = thisPivot.RowRange
Dim i As Long
'--- start at 2 to skip the "Operating Units" and end at Count-1
' to skip the "Grand Total"
For i = 2 To theseRows.Count - 1
'--- check to make sure the row is not empty and that
' the value does NOT have the word "Total"
If Len(theseRows.Cells(i, 1)) > 0 Then
If Not theseRows.Cells(i, 1) Like "*Total" Then
Debug.Print theseRows.Cells(i, 1) & " is visible"
'--- you can use this result as the field name
' to select and format the data area
End If
End If
Next i
End Sub