过滤数据透视表的ShowDetails

时间:2015-09-24 07:34:04

标签: excel vba excel-vba pivot-table

我正在寻找有效的方法来过滤数据透视表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子句以获得更多的行条件。

1 个答案:

答案 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方法,但我发现它不那么灵活,所以一般我更喜欢使用像我在这里出现的循环。

希望这能帮到你