数据透视表筛选具有2个单元格值

时间:2018-08-23 18:41:18

标签: excel vba excel-vba

我正在寻找在Excel 2016中构建数据透视表的方法,该数据透视表将具有链接到其他Excel单元格的过滤器 s ,因此它们无需手动调整过滤器,而是链接到单元格值(值更改基于INDEX-MATCH公式)。

大量在线资源,我能够找到有效的代码。挑战是我有2个单独的过滤器(我不想合并数据以将过滤器保持为1)。

这很好,但是仅适用于一个单元格和一个过滤器:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Worksheets(1).Range("I6:I7")) Is Nothing Then Exit Sub

'Set the Variables to be used
Dim pt As PivotTable
Dim Field As PivotField
Dim pivot_item As PivotItem
Dim NewCat As String
Dim test_val As String

'Here you amend to suit your data
Set pt = Worksheets(1).PivotTables("PivotTable1")
Set Field = pt.PivotFields("Brand")
NewCat = Worksheets(1).Range("I6").Value

'Here is the test if the input field exists
test_val = NewCat
For Each pivot_item In pt.PivotFields("Brand").PivotItems
    If pivot_item.Name = test_val Then
        Exit For
    End If
Next pivot_item
On Error Resume Next

'This updates and refreshes the PIVOT table
With pt
Field.ClearAllFilters
Field.CurrentPage = NewCat
pt.RefreshTable
End With
End Sub

还有另一个带有过滤器"Type"的PivotField,我正尝试将其链接到范围"H6"。我在调整后的“范围和字段”下(也作为WorkSheet属性)复制了调整后的代码。值应该正确,因为此代码也可以工作-单独。

鉴于不允许我使用两个具有相同名称的代码,我将另一个重命名为 2 ,但我不确定这是正确的。我没有收到任何错误消息,但是第二个代码不起作用。更改单元格“ I6”值时会得到结果,但是“ H6”无效。

Private Sub Worksheet_SelectionChange2(ByVal Target As Range)

如何将这两个过滤器链接到它们各自的单元格(同时)?还是所有这些都必须在同一代码内工作?

最好仅更改单元格数据使其工作(就像原始代码适用于单个过滤器一样),但是第二个最佳选择是需要在单元格调整后通过按钮启动VBA脚本。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果在检查目标是否与x范围相交的方式方面发生变化,则可以在同一组代码中包含大量的Ranges。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Worksheets(1).Range("I6:I7")) Is Nothing Then

        '<previous code>

    ElseIf Not Intersect(Target, Worksheets(1).Range("H6")) Is Nothing Then

        '<new code>

    End If

End Sub