Как связать таблицу и сводную таблицу с помощью слайсеров в Excel?

Что ж. У меня есть таблица с именем «ALL_INFO» на листе в Excel, и я сделал сводную таблицу на другом листе, ее имя «PIVOT_INFO». И я хотел бы знать, как связать таблицу и сводную таблицу с помощью слайсеров для фильтрации информации, и она будет отражена в обеих таблицах.

Кто-нибудь знает, как я могу это сделать?

Заранее спасибо.


person PoorChristmas    schedule 02.04.2018    source источник
comment
Вы погуглили это? Искали этот сайт? Я знаю, что видел ответы на подобные вопросы...   -  person ashleedawg    schedule 02.04.2018
comment
Возможный дубликат связанных таблиц и слайсера в excel...(и несколько сотен других ответов только с этого сайта.)   -  person ashleedawg    schedule 02.04.2018


Ответы (1)


Создайте слайсер для сводной таблицы и один для таблицы. Убедитесь, что PT Slicer виден, а Table Slicer скрыт где-то, где пользователи его не видят. Затем поместите этот код в модуль листа, соответствующий рабочему листу, на котором находится ваш PT:

Option Explicit

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim sLastUndoStackItem As String
Dim sc_Pivot As SlicerCache
Dim sc_Table As SlicerCache
Dim si_Pivot As SlicerItem
Dim si_Table As SlicerItem

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

If Target.Name = "PivotTable1" Then '<= Change name as appropriate
    On Error Resume Next 'in case the undo stack has been wiped or doesn't exist
    sLastUndoStackItem = Application.CommandBars(14).FindControl(ID:=128).List(1) 'Standard Commandbar, undo stack
    'The above line doesn't seem to work in my version of O365 so we'll use the English language backup
    If sLastUndoStackItem = "" Then sLastUndoStackItem = Application.CommandBars("Standard").Controls("&Undo").List(1)
    On Error GoTo 0

    If sLastUndoStackItem = "Filter" Or sLastUndoStackItem = "Slicer Operation" Then

        Set sc_Pivot = ActiveWorkbook.SlicerCaches("Slicer_Data") '<= Change name as appropriate
        Set sc_Table = ActiveWorkbook.SlicerCaches("Slicer_Data1") '<= Change name as appropriate
        sc_Table.ClearAllFilters

        On Error Resume Next 'In case items differ between Table and PT
        For Each si_Pivot In sc_Pivot.SlicerItems
            With si_Pivot
                sc_Table.SlicerItems(.Name).Selected = .Selected
            End With
        Next si_Pivot
    End If
End If

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

Вот как все выглядит до того, как я использую слайсер «Мастер»:

введите здесь описание изображения

...и вот как все выглядит после использования слайсера "Мастер":

введите здесь описание изображения

Обратите внимание, что фильтрация таблицы скрывает строки на всем листе. Таким образом, вы не хотите помещать рядом с таблицей что-либо, что вы хотите всегда видеть.

person jeffreyweir    schedule 03.04.2018
comment
Привет Джефф, у вас есть видео-учебник для этого. так как у меня такая же проблема. Я пытаюсь управлять сводной таблицей и таблицей Excel с помощью одного слайсера, но не могу этого сделать. Я попытался вставить ваш код в сводную таблицу в макросе. Он все еще не работает, как показано выше. - person Jitesh Vacheta; 23.02.2020
comment
Привет Джитеш. Как называется ваша сводная таблица? - person jeffreyweir; 24.02.2020
comment
Привет, Джефф, в основном я преобразовал весь источник данных в таблицу Excel (Ctr + T), поэтому, если я добавлю какое-либо новое значение, оно автоматически добавит в мою сводную таблицу. Теперь вопрос: я создал два слайсера, один из таблицы Excel тот и другой из этой сводной таблицы. Для справки я прикрепил образец файла (Example.xlsx) github.com/supersaiyan12/Query. найдем DataSource_Tab и Pivot_Tab. если я изменю в одном слайсере, это не повлияет на другой слайсер. - person Jitesh Vacheta; 03.03.2020