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

Таблица простирается от столбцов A до AB и строк от 1 до 10000. Строки с 1 по 12 составляют заголовок. Столбец K помечен как « Статус проекта» и содержит слова « Открыто» или « Закрыто». Мне нужно иметь возможность включать и выключать этот фильтр, отображая все проекты или только открытые проекты, с двумя кнопками параметров, сгруппированными вместе. Затем я должен иметь возможность указать диапазон дат, который будет работать при отображении всех или только открытых проектов, что существенно отфильтровывает данные еще больше. (напр. все открытые проекты за последние 6 месяцев) Диапазон дат должен быть указан следующим образом

менее 3 месяцев

менее 6 месяцев

менее 1 года

от 1 до 3 лет

от 3 до 5 лет

старше 5 лет

Еще 7 кнопок будут размещены в отдельном групповом поле для выбора этих диапазонов дат, а седьмая кнопка - для отображения всех дат. Этот фильтр также должен быть рассчитан с текущей даты. У меня больше всего с этим проблем, так как я не знаю, как создать фильтр за последние пять лет, который все еще будет точным в последующие годы, без изменения вручную даты, на которой он основан.

Любая помощь с этим будет принята с благодарностью.

1 ответ1

0

Поскольку то, что вы делаете, в основном повторяется 7 раз, вот как это сделать один раз. Я установил некоторые данные в 3 столбцах. Данные явно отличаются от ваших, но применима та же идея.

Начальная настройка на рабочем листе

Вот мои 3 столбца с некоторыми данными, заполненными в них.

Кодирование VBA

Нажмите Alt + F11, чтобы открыть сторону VBA. В верхней части выберите «Вставка»> «Модуль», а затем поместите что-то вроде этого:

Public Sub Filter1()
    Range("A1:C1").AutoFilter
    Range("$A$1:$C$6").AutoFilter Field:=1, Criteria1:="4"
End Sub

Объяснение используемого кода

Часть кода:

Range("A1:C1").AutoFilter

создает начальный фильтр (где вы видите выпадающие окна)

Эта часть конечно делает фактический фильтр:

Range("$A$1:$C$6").AutoFilter Field:=1, Criteria1:="4"
  • Часть Range - это диапазон, который фильтруется. Обратите внимание, что если у вас есть несколько листов, вы хотите вызвать диапазон как "Sheet1"!$ A $ 1:$ C $ 6 "вместо просто" $ A $ 1:$ C $ 6 ".

  • Номер поля - это столбец, по которому вы сортируете. В моем примере поле 1 является столбцом A, потому что A был первым столбцом, который я выбрал для своего диапазона. Если бы я выбрал для своего диапазона что-то вроде "$ B $ 1:$ C $ 6", тогда Поле 1 было бы столбцом B.

  • Критерии1 - это то, что фильтрует Поле. Обратите внимание, что критерии могут быть больше, меньше, и т.д. Таким образом, у вас может быть Criteria1:= "<4", и он будет работать так, как ожидается.

Прикрепление кода к кнопке

Я могу прикрепить приведенный выше код к кнопке, перетащив форму, похожую на прямоугольник, на лист, щелкнув правой кнопкой мыши по фигуре и щелкнув «Назначить макрос».

Затем я просто выбираю созданное мной дополнительное имя, в данном случае это Filter1.

Теперь вы можете сделать то же самое для ваших фильтров, изменив критерии и диапазоны. Также повторите для количества фильтров, которые вы хотите сделать.

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