Я создаю маркетинговую таблицу для офиса. Есть две основные вещи, с которыми мне трудно справиться:

1) Создание панели сводных диаграмм из исходных данных (~ 3000 строк) 2) Фильтрация этих данных по торговым представителям, месяцам и кварталам

Я работаю в Excel и с таблицами около 6 месяцев, и мне довольно комфортно работать с таблицами, сводными таблицами и графиками для вышеупомянутого; но я только недавно начал изучать сценарии VBA для создания макросов.

Мой вопрос заключается в следующем: как я могу применить более одного фильтра на таблицу с помощью кнопок. Другими словами, я хочу иметь возможность нажимать button A которая фильтрует продажи для Джима. Затем я хочу иметь возможность нажать еще одну кнопку, button B , которая, помимо фильтрации продаж для Джима, также фильтрует продажи для Джанет.

У меня была другая идея - использовать флажки для создания нескольких фильтров для каждой диаграммы, но я не знаю, как использовать флажки с сводными таблицами.

Я не могу использовать слайсеры из-за проблем совместимости (Mac, Excel старше '07 и т.д.) Можно ли это сделать?

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

1 ответ1

0

Я хотел бы предложить вам решение, которое намного проще и быстрее. Если вы используете этот код VBA, вам не нужно создавать много кнопок.

Все, что вам нужно сделать.

  1. Выберите весь диапазон данных, включая строки заголовка, и перейдите в поле «Имя» или нажмите вкладку «Формула» и выберите «Определить имя» и назовите «Диапазон данных».

  2. Скопируйте этот код VBA с помощью VBE (редактор Visual Basic).

  3. Если все готово, дважды щелкните по ИМЯ ПРОДАВЦА.

Excel отфильтрует записи, используя имя пользователя.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim rgTable As Range
    Dim rgData As Range
    Dim xColumn As Integer

    On Error Resume Next

    Application.ScreenUpdating = False

    Set rgTable = Range("SALES")

    With rgTable
        Set rgData = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)

        If Not Application.Intersect(ActiveCell, rgData.Cells) Is Nothing Then
            xColumn = ActiveCell.Column - .Column + 1

            If ActiveSheet.AutoFilterMode = False Then
                .AutoFilter
            End If

            If ActiveSheet.AutoFilter.Filters(xColumn).On = True Then
                .AutoFilter Field:=xColumn
            Else
                .AutoFilter Field:=xColumn, Criteria1:=ActiveCell.Value
            End If
        End If

    End With

    Set rgData = Nothing
    Set rgTable = Nothing

    Application.ScreenUpdating = True

End Sub

NB:

1.Этот Код был протестирован мной, прежде чем я разместил его здесь как Решение.

2. Я предлагаю метод Двойного щелчка, исходя из ваших требований.

3. На самом деле, используя этот код, Excel фильтрует записи только по ИМЯ ПРОДАЖИ, означает, что это ОДИН КРИТЕРИЙ Фильтр. Если вы хотите добавить больше критериев, код необходимо пересмотреть.

Надеюсь, это поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .