Excel 2013 VBA Pivot Table выбирает только первые 5 элементов со связями
Я пытаюсь найти способ использовать Excel 2013 VBA, чтобы выбрать только первые 5 элементов в сводной таблице. Я попробовал следующие строки кода, чтобы показать только 5 лучших элементов:
Dim c
dim i as long
Worksheets("sheet1").PivotTables(1).PivotFields ("field1")
ActiveSheet.PivotTables(1).PivotFields("field1").CurrentPage = "(All)"
With ActiveSheet.PivotTables(1).PivotFields("field1")
c = 5
For i = .PivotItems.Count To 1 Step -1
If (c > 0) Then
.PivotItems(i).Visible = True
Else
.PivotItems(i).Visible = False
End If
c = c - 1
Next
End With
Вот код, который мне дает макрос-рекордер, и он не работает:
ActiveSheet.PivotTables("PivotTable5").PivotFilters. _
.PivotFields("field1") Add2 Type:=xlTopCount, _ DataField:=ActiveSheet.PivotTables("PivotTable5"). _
PivotFields("fied1"), Value1:=5
Приведенный ниже код работает нормально, если нет никаких связей значений ни для одного из значений, которых нет в списке Top 5. С нашим набором данных мы всегда будем связываться в нашем Топ-5.
With Workbooks(cFileName).Worksheets("sheet1")
.PivotTables(1).PivotFields("Field1").PivotFilters.Add2
xlTopCount, .PivotTables(1).PivotFields("Field1"), 5
End With
РЕДАКТИРОВАТЬ: Список сводной таблицы покажет некоторые элементы как проверенные, но никакие данные не связаны с этими значениями. Диаграммы, основанные на этих сводных таблицах, пустые, и следующий код выбирает только 5 нижних значений в поле, как это было задумано в исходном сообщении.
With workbook.Worksheets("sheet1").PivotTables("PivotTable2").PivotFields
("Count of Description")
For Each WS In ActiveWorkbook.Worksheets
For Each pvt In WS.PivotTables
c = 5
For i = .PivotItems.Count To 1 Step -1
If (c > 0) Then
.PivotItems(i).Visible = True
Else
.PivotItems(i).Visible = False
End If
c = c - 1
Next
Next
Next
End With
1 ответ
Я наконец понял это. Лучший способ сделать это на случай, если кому-то еще интересно, - это записать макрос, пока вы:
- Выберите ячейку, в которой вы хотите увидеть данные. В моем случае это был "B10". Это будет отличаться для всех остальных в зависимости от того, где находятся данные вашей сводной таблицы.
- Нажмите клавиши SHIFT + END + СТРЕЛКА ВНИЗ, чтобы перейти к нижней части используемого диапазона.
- Выберите все строки, чтобы скрыть.
- Щелкните правой кнопкой мыши значения, чтобы скрыть.
- Выберите "Фильтр" из списка.
- Нажмите "Скрыть выбранные элементы".
Ниже приведен код, на который я буду ссылаться в будущем.
Application.Goto reference:=Workbooks("File").Sheets("Sheet1").Range("B10")
If IsEmpty(Range("B11").value) = False Then
Range("B10").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete
Else
End If