2017-08-16 560 views
0

我想找到一种方法来使用Excel 2013 VBA来选择数据透视表中的前5个项目。我曾尝试下面的代码行,试图只显示前5个项目:Excel 2013 VBA数据透视表只选择排名前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 

代码下面的工作正常,如果没有价值纽带的任何不在前五名单的价值。使用我们的数据集,我们总是会在我们的前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 

回答

0

我终于想出了这一个。要做到这一点,最好的办法就是在其他人想知道的时候记录一个宏:

  1. 选择您想要开始查看数据的单元格。在我的情况下,它是“B10”。这对于其他人来说会有所不同,具体取决于数据透视表数据的位置。
  2. 按下SHIFT + END +向下箭头键向下到使用范围的底部。
  3. 选择所有要隐藏的行。
  4. 右键单击要隐藏的值。
  5. 从列表中选择“过滤器”。
  6. 点击“隐藏选定的项目”。

以下是我将来会参考的代码。

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