我正在寻找有效的方法来过滤数据透视表ActiveCell的ShowDetails
。我想将结果缩小到特定列和行。
比如说,原始数据(构建数据透视表)有十列。我想只显示两列的详细信息,我想只选择具有特定数据的行,即特定列中没有空单元格。
这是我的起点:
Sub ShowDetailsAndFilterResults()
On Error Resume Next
Dim PT As PivotTable
Set PT = ActiveCell.PivotTable
If Not PT Is Nothing Then
Selection.ShowDetail = True
End If
End Sub
对于SQL用户,很容易想象我想要的ShowDetails命令解决方案只能获得SELECT限制的结果,列出特定的列和WHERE子句以获得更多的行条件。
答案 0 :(得分:1)
以下是一些可以帮助您完成的指示:
Sub ShowDetailsAndFilterResults()
Dim PT As PivotTable, _
WsPt As Worksheet, _
WsD As Worksheet
On Error Resume Next
Set PT = ActiveCell.PivotTable
Set WsPt = ActiveSheet
If Not PT Is Nothing Then
ActiveCell.ShowDetail = True
Set WsD = ActiveSheet
With WsD
'---Delete useless columns---
.Range("C:C,E:E,G:G,H:H").Delete Shift:=xlToLeft
'---Or just Hide useless columns---
'Range("C:C,E:E,G:G,H:H").EntireColumn.Hidden = True
'---Scan rows to filter them---
For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Cells(i, 4) <> "test_value" Then
'---place the code regarding the test you have to do---
Else
'---lets say you want to keep the rows that are different of "test_value" on column 4
.Range("A" & i).EntireRow.Hidden = True
'---Or delete the rows that doesn't fit your criteria---
'.Range("A" & i).EntireRow.Delete Shift:=xlUp
End If
Next i
End With
End If
On Error GoTo 0
End Sub
如果您对结果的过滤严格少于3个标准&#39;行,您可以使用AutoFilter方法,但我发现它不那么灵活,所以一般我更喜欢使用像我在这里出现的循环。
希望这能帮到你