Vba excel фильтр на дату

На чтение 6 мин. Просмотров 7.9k.

Итог: узнайте, как применять фильтры даты с VBA. Включает примеры фильтрации для диапазона между двумя датами, группами дат из раскрывающегося списка фильтра, динамическими датами в периоде и т.д.

Уровень мастерства: Средний

VBA AutoFilter Automate Date Filters

Содержание

  1. Скачать файл
  2. Фильтры даты в Excel
  3. Фильтры диапазона дат в VBA
  4. Несколько групп дат
  5. Динамические даты в периодах
  6. Фильтры и типы данных

Скачать файл

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

VBA AutoFilters Guide.xlsm (100.5 KB)

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

Мы также можем выбрать из подменю Date Filters. Это позволяет нам фильтровать диапазоны дат, как до, после или между двумя датами. Есть также много вариантов дат в периодах (этот месяц, следующий месяц, последний квартал и т.д.).

Давайте посмотрим на некоторые примеры кода для различных
фильтров даты.

При
применении фильтра для одного числа нам нужно использовать форматирование чисел,
которое применяется в столбце. Это странная причуда VBA, которая
может привести к неточным результатам, если вы не знаете правила. В приведенном
ниже коде есть пример.

Фильтры диапазона дат в VBA

Следующий макрос содержит примеры основных фильтров даты. Важно отметить, что значения параметров Criteria заключены в кавычки. Операторы сравнения = <> также включены в кавычки.
Пожалуйста, ознакомьтесь с моей статьей Фильтрация сводной таблицы или среза по самой последней дате или периоду для получения более подробной информации о том, как использовать метод AutoFilter и его параметры.

Вы можете скопировать / вставить приведенный ниже код в VB Editor.

Sub AutoFilter_Date_Examples()
' Примеры фильтрации столбцов с датами
 
Dim lo As ListObject
Dim iCol As Long

  ' Установить ссылку на первую таблицу на листе
  Set lo = Sheet1.ListObjects(1)
  
  ' Установить поле фильтра
  iCol = lo.ListColumns("Date").Index
   
  ' Очистить фильтры
  lo.AutoFilter.ShowAllData

  With lo.Range
      
    ' Одиночная дата - использовать тот же формат даты, который 
     'применяется к столбцу
    .AutoFilter Field:=iCol, Criteria1:="=1/2/2014"
    
    'До даты
    .AutoFilter Field:=iCol, Criteria1:="<1/31/2014"
    
    'После или равно дате
    .AutoFilter Field:=iCol, Criteria1:=">=1/31/2014"
    
    'Диапазон дат (между датами)
    .AutoFilter Field:=iCol, _
                        Criteria1:=">=1/1/2014", _
                        Operator:=xlAnd, _
                        Criteria2:="<=12/31/2015"
                      
End Sub

Несколько групп дат

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

Для этих фильтров мы устанавливаем для параметра Operator
значение xlFilterValues. Мы используем Criteria2 (не Criteria1), чтобы указать
массив элементов с помощью функции Array.

Это специальный массив шаблонов, где первое число — это
период времени (год, месяцы, дни и т. Д.). Второе число — последняя дата в
диапазоне. Макрос ниже содержит примеры и дальнейшие пояснения.

Sub AutoFilter_Multiple_Dates_Examples()
'Примеры фильтрации столбцов для нескольких периодов времени даты
 
Dim lo As ListObject
Dim iCol As Long

  'Установить ссылку на первую таблицу на листе
  Set lo = Sheet1.ListObjects(1)
  
  'Установить поле фильтра
  iCol = lo.ListColumns("Date").Index
   
  'Очистить фильтры
  lo.AutoFilter.ShowAllData

  With lo.Range

    'При фильтрации по нескольким периодам, выбранным из
    'раскрывающегося меню фильтра, используйте Operator: = xlFilterValues и
    'Критерии2 с узорным массивом. Первое число - 
    'временной период. Второе число - последняя дата в периоде.
    
    'Первое измерение массива - группа периода времени
      '0-Годы
      '1-Месяцы
      '2-Дни
      '3-Часы
      '4-Минуты
      '5-Секунды
    
    
    'Несколько лет (2014 и 2016) использовать последний день времени
    'периода для каждого элемента массива
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(0, "12/31/2014", 0, "12/31/2016")
    
    'Несколько месяцев (январь, апрель, июль, октябрь 2015 года)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(1, "1/31/2015", 1, "4/30/2015", 1, "7/31/2015", 1, "10/31/2015")
    
    'Несколько дней
    'Последний день каждого месяца: январь, апрель, июль, октябрь 2015 года)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(2, "1/31/2015", 2, "4/30/2015", 2, "7/31/2015", 2, "10/31/2015")
    
    'Установить поле фильтра
     iCol = lo.ListColumns("Date Time").Index
     
    'Очистить фильтры
    lo.AutoFilter.ShowAllData
    
    'Несколько часов» (все даты в 11:00 часов 10 января 2008 г.
    'и 11:00 часов 20.01.2008)
    
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(3, "1/10/2018 13:59:59", 3, "1/20/2018 23:59:59")
  
  End With
  
End Sub

Динамические даты в периодах

Следующий макрос содержит примеры дат в определенных
периодах. Это аналогично выбору предустановленных элементов фильтра из подменю «Фильтры
даты».

Для этих фильтров мы устанавливаем параметр Operator равным
xlFilterDynamic. Мы устанавливаем Criteria1 в константу, которая представляет
параметр периода динамической даты. Константы перечислены ниже.

Sub AutoFilter_Dates_in_Period_Examples()
'Примеры фильтрации столбцов для ДАТЫ В ПЕРИОД
'Пресеты фильтров даты, найденные в подменю «Фильтры даты
 
Dim lo As ListObject
Dim iCol As Long

  'Установить ссылку на первую таблицу на листе
  Set lo = Sheet1.ListObjects(1)
  
  'Установить поле фильтра
  iCol = lo.ListColumns("Date").Index
   
  'Очистить фильтры
  lo.AutoFilter.ShowAllData
  
  'Оператор: = xlFilterDynamic
  'Критерии1: = одно из следующих перечислений
  
  ' Значение константы
  ' 1     xlFilterToday
  ' 2     xlFilterYesterday
  ' 3     xlFilterTomorrow
  ' 4     xlFilterThisWeek
  ' 5     xlFilterLastWeek
  ' 6     xlFilterNextWeek
  ' 7     xlFilterThisMonth
  ' 8     xlFilterLastMonth
  ' 9     xlFilterNextMonth
  ' 10    xlFilterThisQuarter
  ' 11    xlFilterLastQuarter
  ' 12    xlFilterNextQuarter
  ' 13    xlFilterThisYear
  ' 14    xlFilterLastYear
  ' 15    xlFilterNextYear
  ' 16    xlFilterYearToDate
  ' 17    xlFilterAllDatesInPeriodQuarter1
  ' 18    xlFilterAllDatesInPeriodQuarter2
  ' 19    xlFilterAllDatesInPeriodQuarter3
  ' 20    xlFilterAllDatesInPeriodQuarter4
  ' 21    xlFilterAllDatesInPeriodJanuary
  ' 22    xlFilterAllDatesInPeriodFebruray <- февраль написан с ошибкой
  ' 23    xlFilterAllDatesInPeriodMarch
  ' 24    xlFilterAllDatesInPeriodApril
  ' 25    xlFilterAllDatesInPeriodMay
  ' 26    xlFilterAllDatesInPeriodJune
  ' 27    xlFilterAllDatesInPeriodJuly
  ' 28    xlFilterAllDatesInPeriodAugust
  ' 29    xlFilterAllDatesInPeriodSeptember
  ' 30    xlFilterAllDatesInPeriodOctober
  ' 31    xlFilterAllDatesInPeriodNovember
  ' 32    xlFilterAllDatesInPeriodDecember
      
  With lo.Range
    
    'Все даты в январе (по всем годам)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterDynamic, _
                Criteria1:=xlFilterAllDatesInPeriodJanuary

    'Все даты во втором квартале (по всем годам)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterDynamic, _
                Criteria1:=xlFilterAllDatesInPeriodQuarter2
  
  End With

End Sub

Вот ссылка на справочную страницу MSDN со списком XlDynamicFilterCriteria. И спасибо Дугу Глэнси из YourSumBuddy за то, что он указал на февральскую опечатку в константе. У него есть несколько полезных советов для параметра Operator в этой статье.

Фильтры и типы данных

Параметры
раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце.
У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО
различных комбинаций операторов и критериев для каждого типа фильтра.

Я создал отдельные статьи для каждого из этих типов фильтров. Статьи содержат пояснения и примеры кода VBA.

  • Как очистить фильтры с помощью VBA
  • Как отфильтровать пустые и непустые ячейки
  • Как фильтровать числа с помощью VBA
  • Как фильтровать текст с помощью VBA
  • Как отфильтровать цвета и значки с помощью VBA

Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.

Пожалуйста, оставьте
комментарий ниже с любыми вопросами или предложениями. Спасибо!

Bottom line: Learn how to apply date filters with VBA.  Includes examples for filtering for a range between two dates, date groups from filter drop-down list, dynamic dates in period, etc.

Skill level: Intermediate

VBA AutoFilter Automate Date Filters

Download the File

The Excel file that contains the code can be downloaded below.  This file contains code for filtering different data types and filter types.  Please see my article on The Ultimate Guide to AutoFilters in VBA for more details.

Date Filters in Excel

We have a lot of options when filtering a column that contains dates.  The filter drop-down menu list groups the dates by years, months, days, hours, minutes, seconds.  We can expand and select those check boxes to filter multiple items.

We can also choose from the Date Filters sub menus.   This allows us to filter for date ranges like before, after, or between two dates.  There are also many options for dates in periods (This Month, Next Month, Last Quarter, etc.).

Let’s take a look at some code examples for the different date filters.

When applying a filter for a single number we need to use the number formatting that is applied in the column.  This is a weird quirk of VBA that can cause inaccurate results if you don’t know the rule.  There is an example in the code below.

Date Range Filters in VBA

The following macro contains examples for basic date filters.   It’s important to note that the Criteria parameter values are wrapped in quotation marks.  The comparison operators = < > are also included inside the quotes.  Please see my post on The Ultimate Guide to Filters in VBA for more details on how to use the AutoFilter method and its parameters.

You can copy/paste the code below into the VB Editor.

Sub AutoFilter_Date_Examples()
'Examples for filtering columns with DATES
 
Dim lo As ListObject
Dim iCol As Long

  'Set reference to the first Table on the sheet
  Set lo = Sheet1.ListObjects(1)
  
  'Set filter field
  iCol = lo.ListColumns("Date").Index
   
  'Clear Filters
  lo.AutoFilter.ShowAllData

  With lo.Range
      
    'Single Date - Use same date format that is applied to column
    .AutoFilter Field:=iCol, Criteria1:="=1/2/2014"
    
    'Before Date
    .AutoFilter Field:=iCol, Criteria1:="<1/31/2014"
    
    'After or equal to Date
    .AutoFilter Field:=iCol, Criteria1:=">=1/31/2014"
    
    'Date Range (between dates)
    .AutoFilter Field:=iCol, _
                        Criteria1:=">=1/1/2014", _
                        Operator:=xlAnd, _
                        Criteria2:="<=12/31/2015"
                      
End Sub

Multiple Date Groups

The following macro contains examples of how to filter for multiple date groups.  This is the same as selecting specific years, months, days, hours, minutes from the list box in the filter drop-down menu.

For these filters we set the Operator parameter to xlFilterValues.  We use Criteria2 (not Criteria1) to specify an Array of items using the Array function.

This is a special patterned array where the first number is the time period (year, months, days, etc.).  The second number is the last date in the range.  The macro below contains examples and further explanation.

Sub AutoFilter_Multiple_Dates_Examples()
'Examples for filtering columns for multiple DATE TIME PERIODS
 
Dim lo As ListObject
Dim iCol As Long

  'Set reference to the first Table on the sheet
  Set lo = Sheet1.ListObjects(1)
  
  'Set filter field
  iCol = lo.ListColumns("Date").Index
   
  'Clear Filters
  lo.AutoFilter.ShowAllData

  With lo.Range

    'When filtering for multiple periods that are selected from
    'filter drop-down menu,use Operator:=xlFilterValues and
    'Criteria2 with a patterned Array.  The first number is the
    'time period.  Second number is the last date in the period.
    
    'First dimension of array is the time period group
      '0-Years
      '1-Months
      '2-Days
      '3-Hours
      '4-Minutes
      '5-Seconds
    
    
    'Multiple Years (2014 and 2016) use last day of the time
    'period for each array item
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(0, "12/31/2014", 0, "12/31/2016")
    
    'Multiple Months (Jan, Apr, Jul, Oct in 2015)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(1, "1/31/2015", 1, "4/30/2015", 1, "7/31/2015", 1, "10/31/2015")
    
    'Multiple Days
    'Last day of each month: Jan, Apr, Jul, Oct in 2015)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(2, "1/31/2015", 2, "4/30/2015", 2, "7/31/2015", 2, "10/31/2015")
    
    'Set filter field
     iCol = lo.ListColumns("Date Time").Index
     
    'Clear Filters
    lo.AutoFilter.ShowAllData
    
    'Multiple Hours (All dates in the 11am hour on 1/10/2018
    'and 11pm hour on 1/20/2018)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(3, "1/10/2018 13:59:59", 3, "1/20/2018 23:59:59")
  
  End With
  
End Sub

Dynamic Dates in Period Examples

The following macro contains examples for dates in specific periods.  This is the same as selecting the preset filter items from the Date Filters sub menu.

For these filters we set the Operator parameter to xlFilterDynamic.  We set Criteria1 to a constant that represents the dynamic date period option.  The constants are listed below.

Sub AutoFilter_Dates_in_Period_Examples()
'Examples for filtering columns for DATES IN PERIOD
'Date filters presets found in the Date Filters sub menu
 
Dim lo As ListObject
Dim iCol As Long

  'Set reference to the first Table on the sheet
  Set lo = Sheet1.ListObjects(1)
  
  'Set filter field
  iCol = lo.ListColumns("Date").Index
   
  'Clear Filters
  lo.AutoFilter.ShowAllData
  
  'Operator:=xlFilterDynamic
  'Criteria1:= one of the following enumerations
  
  ' Value Constant
  ' 1     xlFilterToday
  ' 2     xlFilterYesterday
  ' 3     xlFilterTomorrow
  ' 4     xlFilterThisWeek
  ' 5     xlFilterLastWeek
  ' 6     xlFilterNextWeek
  ' 7     xlFilterThisMonth
  ' 8     xlFilterLastMonth
  ' 9     xlFilterNextMonth
  ' 10    xlFilterThisQuarter
  ' 11    xlFilterLastQuarter
  ' 12    xlFilterNextQuarter
  ' 13    xlFilterThisYear
  ' 14    xlFilterLastYear
  ' 15    xlFilterNextYear
  ' 16    xlFilterYearToDate
  ' 17    xlFilterAllDatesInPeriodQuarter1
  ' 18    xlFilterAllDatesInPeriodQuarter2
  ' 19    xlFilterAllDatesInPeriodQuarter3
  ' 20    xlFilterAllDatesInPeriodQuarter4
  ' 21    xlFilterAllDatesInPeriodJanuary
  ' 22    xlFilterAllDatesInPeriodFebruray <-February is misspelled
  ' 23    xlFilterAllDatesInPeriodMarch
  ' 24    xlFilterAllDatesInPeriodApril
  ' 25    xlFilterAllDatesInPeriodMay
  ' 26    xlFilterAllDatesInPeriodJune
  ' 27    xlFilterAllDatesInPeriodJuly
  ' 28    xlFilterAllDatesInPeriodAugust
  ' 29    xlFilterAllDatesInPeriodSeptember
  ' 30    xlFilterAllDatesInPeriodOctober
  ' 31    xlFilterAllDatesInPeriodNovember
  ' 32    xlFilterAllDatesInPeriodDecember
      
  With lo.Range
    
    'All dates in January (across all years)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterDynamic, _
                Criteria1:=xlFilterAllDatesInPeriodJanuary

    'All dates in Q2 (across all years)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterDynamic, _
                Criteria1:=xlFilterAllDatesInPeriodQuarter2
  
  End With

End Sub

Here is a link to the MSDN help page with a list of the XlDynamicFilterCriteria Enumeration.  And thanks to Doug Glancy over at YourSumBuddy for pointing out the February misspelling in the constant.  He has some good tips for the Operator parameter in this article.

Filters & Data Types

The filter drop-down menu options change based on what type of data is in the column.   We have different filters for text, numbers, dates, and colors.  This creates A LOT of different combinations of Operators and Criteria for each type of filter.

I created separate posts for each of these filter types.  The posts contain explanations and VBA code examples.

  • How to Clear Filters with VBA
  • How to Filter for Blank & Non-Blank Cells
  • How to Filter for Text with VBA
  • How to Filter for Numbers with VBA
  • How to Filter for Colors & Icons with VBA

The file in the downloads section above contains all of these code samples in one place.  You can add it to your Personal Macro Workbook and use the macros in your projects.

Please leave a comment below with any questions or suggestions.  Thanks! 🙂

I am using an AutoFilter with VBA in Excel that works for regular filters, but not a column formatted as date.

I can filter it manually. If I run my code, it filters nothing but when I check the filter and then only click ok (no change being applied to the filter criteria), it filters correctly.

Here is my code:

ws.ListObjects(SheetName).Range.AutoFilter Field:=3, Criteria1 _
        :=">" & CDate([datecell]), Operator:=xlAnd, Criteria2:= _
        "<=" & CDate(WorksheetFunction.EoMonth([datecell], 3))

It seems to be a common problem, but I have not found a solution.

When I run a recorded macro, it does not work either.

Community's user avatar

asked Nov 4, 2013 at 11:44

Spurious's user avatar

9

Dates can be tricky with Excel VBA AutoFilter. Some find it easier to just loop through the array to be filtered.

Sometimes I have found that one can use the numeric value of the date, especially when dealing with «dates between»

Criteria1:= ">" & CDbl([datecell])
Criteria2:= "<=" & CDbl(WorksheetFunction.EoMonth([datecell], 3))

Note that the above need to be «real dates» and not strings that look like dates. Even a single «string date» will mess things up.

answered Nov 4, 2013 at 12:43

Ron Rosenfeld's user avatar

Ron RosenfeldRon Rosenfeld

52.1k7 gold badges28 silver badges59 bronze badges

10

Autofilter() works with ‘universal’ format yyyy-mm-dd, i.e.:

Criteria1:= ">" & Format([MY_DATE],"yyyy-mm-dd")
Criteria2:= "<=" & Format([MY_DATE],"yyyy-mm-dd")

It’s better because Excel can’t ‘understand’ it wrong . If you use mm/dd/yyyy or dd/mm/yyyy Excel can fit 02/jan as 01/feb.

see:
http://www.oaltd.co.uk/ExcelProgRef/Ch22/ProgRefCh22.htm

The Rules for Working with Excel (International Issue)

  1. When you have to convert numbers and dates to strings for passing to Excel (such as in criteria for AutoFilter or .Formula strings), always explicitly convert the data to a US-formatted string, using Trim(Str(MyNumber)), or the sNumToUS() function shown earlier, for all number and date types. Excel will then use it correctly and convert it to the local number/date formats.

Edit:

We can create an universal Function using Application.International like:

Sub MySub()
    Select Case application.International(xlDateOrder)
        Case Is = 0
            dtFormat = "mm/dd/yyyy"
        Case Is = 1
            dtFormat = "dd/mm/yyyy"
        Case Is = 2
            dtFormat = "yyyy/mm/dd"
        Case Else
            dtFormat = "Error"
    End Select

    Debug.Print (dtFormat)

    ...
    Criteria1:= ">" & Format([MY_DATE],dtFormat)
    Criteria2:= "<=" & Format([MY_DATE],dtFormat)
    ...

End Sub

answered Aug 6, 2015 at 21:13

Makah's user avatar

MakahMakah

4,4053 gold badges47 silver badges68 bronze badges

you need to convert the format to the american format, like:

">" & Format([datecell], "mm/dd/yyyy")

VBA does not understand another format.

Reeno's user avatar

Reeno

5,69911 gold badges39 silver badges50 bronze badges

answered May 22, 2014 at 15:12

Karlos Henrique's user avatar

Karlos Henrique,
Thanks for suggesting Format([datecell], «mm/dd/yyyy»).
It works in my file.
My previous code is :

Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & StrtDt, _
  Operator:=xlAnd, _
  Criteria2:="<=" & EndDt

My modified code is :

Range("A1:D" & Trim(Str(LstRec))).AutoFilter Field:=2, _
  Criteria1:=">=" & Format(StrtDt, "mm/dd/yyyy"), _
  Operator:=xlAnd, _
  Criteria2:="<=" & Format(EndDt, "mm/dd/yyyy")

Thanks.

answered Jun 14, 2014 at 5:59

pmyk's user avatar

pmykpmyk

112 bronze badges

This syntax works for me:

.AutoFilter Field:=2, Operator:=xlFilterValues, Criteria2:=Array(2, Format(Now, "yyyy-mm-dd"))

Hint obtained through a macro registration

answered Apr 29, 2016 at 14:35

Mago Fabian's user avatar

Match your «dd-mm-yyy» to the format of the column, so if you have «16-Aug-16» as your source data formatting then make the filter as «dd-mmm-yy»

answered Aug 16, 2016 at 8:28

Graham P's user avatar

1

One solution is to set up correctly the format of the target column. If its formatted as «custom», even if it looks like a date, it won’t work.

You are asking VBA to filter based on a date, therefore the format of the columns has to be a date too.

answered Jan 29, 2019 at 14:24

Andrés Roldán's user avatar

SO this worked for me pretty clean

ActiveSheet.Range("$A$1:$K$35727").AutoFilter Field:=1, Criteria1:= _
        ">=" & Range("G1"), Operator:=xlAnd, Criteria2:="<=" & Range("H1")

You can try this as well

Expected output will start date in my G1 cell and end date will be H1 cell.

Avinash Dalvi's user avatar

answered Nov 22, 2019 at 17:55

Sudhanshu Soni's user avatar

I had similar problem, while filtering column with date. When I changed system date format to 01/01/2020, it converted my date to 1/1/2020 in Criteria field.
My solution was to convert arguments to str during setting to function.

answered Feb 27, 2020 at 12:37

Piotr Kotarba's user avatar

here’s the occam’s razor solution… try putting this in Autoopen for the spreadsheet or if you need to, modify it for the sheet that you wish to affect. it will cause the drop down filters for the date headers to appear as individual dates and not as a date hierarchy.

ActiveWindow.AutoFilterDateGrouping = False

answered Nov 14, 2019 at 17:14

Joe Messingschlager's user avatar

Содержание

  1. Метод Range.AutoFilter (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Примечания
  6. Пример
  7. Поддержка и обратная связь
  8. Range.AutoFilter method (Excel)
  9. Syntax
  10. Parameters
  11. Return value
  12. Remarks
  13. Example
  14. Support and feedback
  15. Как отфильтровать даты с помощью макросов VBA в Excel
  16. Скачать файл
  17. Фильтры даты в Excel
  18. Фильтры диапазона дат в VBA
  19. Несколько групп дат
  20. Динамические даты в периодах
  21. Фильтры и типы данных
  22. Объект AutoFilter (Excel)
  23. Пример
  24. Методы
  25. Свойства
  26. См. также
  27. Поддержка и обратная связь

Метод Range.AutoFilter (Excel)

Фильтрует список с помощью автофильтра.

Синтаксис

выражение.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)

выражение: выражение, возвращающее объект Range.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Field Необязательный Variant Целочисленное смещение поля, на основе которого требуется создать фильтр (слева от списка; крайнее левое поле — значение 1).
Criteria1 Необязательный Variant Условия (строка, например «101»). Используйте «=» для поиска пустых полей, «<>» для поиска непустых полей и «> для выбора полей (Нет данных) в типах данных.

Если этот аргумент пропущен, все условия имеют значение All. Если параметру Operator присвоено значение xlTop10Items, параметр Criteria1 указывает количество элементов (например, «10»). Operator Необязательный XlAutoFilterOperator Константа XlAutoFilterOperator, указывающая тип фильтра. Criteria2 Необязательный Variant Второе условие (строка). Используется с параметрами Criteria1 и Operator для создания составных условий. Также используется в качестве одного условия для полей даты, фильтруемых по дате, месяцу или году. За ним следует массив, уточняющий фильтрацию Массив(Уровень, Дата), где «Уровень» принимает значения 0–2 (год,месяц,дата), а «Дата» — одна допустимая дата в периоде фильтрации. SubField Необязательный Variant Поле из типа данных, для которого применяются условия (например, поле Population из типа Geography или поле Volume из типа Stocks). Пропуск этого значения указывает на «(отображаемое значение)». VisibleDropDown Необязательный Variant Значение True, чтобы отобразить стрелку раскрывающегося списка автофильтра для фильтруемого поля. Значение False, чтобы скрыть стрелку раскрывающегося списка автофильтра для фильтруемого поля. По умолчанию используется значение True.

Возвращаемое значение

Примечания

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

В Excel для Mac этот метод не поддерживается. Поддерживаются аналогичные методы для Selection и ListObject.

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

Пример

В этом примере выполняется фильтрация списка, начинающегося в ячейке A1 на листе «Лист1», чтобы отображались только те записи, в которых первое поле содержит строку «Otis». Стрелка раскрывающегося списка для поля 1 будет скрыта.

В этом примере выполняется фильтрация списка, начинающегося с ячейки A1 на листе «Лист1», для отображения только тех записей, в которых значения первого поля содержат вложенное поле Admin Division 1 (State/province/other) со значением «Washington».

В этом примере выполняется фильтрация таблицы «Таблица1» на листе «Лист1» для отображения только тех записей, в которых значения первого поля соответствуют отображаемому значению: 1, 3, Seattle или Redmond.

Типы данных могут применять несколько фильтров вложенных полей. В этом примере выполняется фильтрация таблицы «Таблица1» на листе «Лист1» для отображения только тех записей, в которых значения первого поля содержат вложенное поле Time zone(s) со значением «Pacific Time Zone», а вложенное поле Date Founded содержит значение 1851 или «(No Data)».

В этом примере выполняется фильтрация таблицы «Таблица1» на листе «Лист1» для отображения первых 10 записей для первого поля на основе вложенного поля Population.

В этом примере выполняется фильтрация таблицы «Таблица1» на листе «Лист1» для отображения всех записей января и февраля 2019 г. для поля 1. При этом не требуется наличие строки, содержащей 31 января.

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Range.AutoFilter method (Excel)

Filters a list by using the AutoFilter.

Syntax

expression.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)

expression An expression that returns a Range object.

Parameters

Name Required/Optional Data type Description
Field Optional Variant The integer offset of the field on which you want to base the filter (from the left of the list; the leftmost field is field one).
Criteria1 Optional Variant The criteria (a string; for example, «101»). Use «=» to find blank fields, «<>» to find non-blank fields, and «> to select (No Data) fields in data types.

If this argument is omitted, the criteria is All. If Operator is xlTop10Items, Criteria1 specifies the number of items (for example, «10»). Operator Optional XlAutoFilterOperator An XlAutoFilterOperator constant specifying the type of filter. Criteria2 Optional Variant The second criteria (a string). Used with Criteria1 and Operator to construct compound criteria. Also used as single criteria on date fields filtering by date, month or year. Followed by an Array detailing the filtering Array(Level, Date). Where Level is 0-2 (year,month,date) and Date is one valid Date inside the filtering period. SubField Optional Variant The field from a data type on which to apply the criteria (for example, the «Population» field from Geography or «Volume» field from Stocks). Omitting this value targets the «(Display Value)». VisibleDropDown Optional Variant True to display the AutoFilter drop-down arrow for the filtered field. False to hide the AutoFilter drop-down arrow for the filtered field. True by default.

Return value

If you omit all the arguments, this method simply toggles the display of the AutoFilter drop-down arrows in the specified range.

Excel for Mac does not support this method. Similar methods on Selection and ListObject are supported.

Unlike in formulas, subfields don’t require brackets to include spaces.

Example

This example filters a list starting in cell A1 on Sheet1 to display only the entries in which field one is equal to the string Otis. The drop-down arrow for field one will be hidden.

This example filters a list starting in cell A1 on Sheet1 to display only the entries in which the values of field one contain a SubField, Admin Division 1 (State/province/other), where the value is Washington.

This example filters a table, Table1, on Sheet1 to display only the entries in which the values of field one have a «(Display Value)» that is either 1, 3, Seattle, or Redmond.

Data types can apply multiple SubField filters. This example filters a table, Table1, on Sheet1 to display only the entries in which the values of field one contain a SubField, Time Zone(s), where the value is Pacific Time Zone, and where the SubField named Date Founded is either 1851 or there is «(No Data)».

This example filters a table, Table1, on Sheet1 to display the Top 10 entries for field one based off the Population SubField.

This example filters a table, Table1, on Sheet1 to display the all entries for January 2019 and February 2019 for field one. There does not have to be a row containing January the 31.

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Как отфильтровать даты с помощью макросов VBA в Excel

Итог: узнайте, как применять фильтры даты с VBA. Включает примеры фильтрации для диапазона между двумя датами, группами дат из раскрывающегося списка фильтра, динамическими датами в периоде и т.д.

Уровень мастерства: Средний

Скачать файл

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

VBA AutoFilters Guide.xlsm (100.5 KB)

Фильтры даты в Excel

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

Мы также можем выбрать из подменю Date Filters. Это позволяет нам фильтровать диапазоны дат, как до, после или между двумя датами. Есть также много вариантов дат в периодах (этот месяц, следующий месяц, последний квартал и т.д.).

Давайте посмотрим на некоторые примеры кода для различных фильтров даты. При применении фильтра для одного числа нам нужно использовать форматирование чисел, которое применяется в столбце. Это странная причуда VBA, которая может привести к неточным результатам, если вы не знаете правила. В приведенном ниже коде есть пример.

Фильтры диапазона дат в VBA

Следующий макрос содержит примеры основных фильтров даты. Важно отметить, что значения параметров Criteria заключены в кавычки. Операторы сравнения = <> также включены в кавычки.
Пожалуйста, ознакомьтесь с моей статьей Фильтрация сводной таблицы или среза по самой последней дате или периоду для получения более подробной информации о том, как использовать метод AutoFilter и его параметры.

Вы можете скопировать / вставить приведенный ниже код в VB Editor.

Несколько групп дат

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

Для этих фильтров мы устанавливаем для параметра Operator значение xlFilterValues. Мы используем Criteria2 (не Criteria1), чтобы указать массив элементов с помощью функции Array.

Это специальный массив шаблонов, где первое число — это период времени (год, месяцы, дни и т. Д.). Второе число — последняя дата в диапазоне. Макрос ниже содержит примеры и дальнейшие пояснения.

Динамические даты в периодах

Следующий макрос содержит примеры дат в определенных периодах. Это аналогично выбору предустановленных элементов фильтра из подменю «Фильтры даты».

Для этих фильтров мы устанавливаем параметр Operator равным xlFilterDynamic. Мы устанавливаем Criteria1 в константу, которая представляет параметр периода динамической даты. Константы перечислены ниже.

Вот ссылка на справочную страницу MSDN со списком XlDynamicFilterCriteria. И спасибо Дугу Глэнси из YourSumBuddy за то, что он указал на февральскую опечатку в константе. У него есть несколько полезных советов для параметра Operator в этой статье.

Фильтры и типы данных

Параметры раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце. У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО различных комбинаций операторов и критериев для каждого типа фильтра.

Я создал отдельные статьи для каждого из этих типов фильтров. Статьи содержат пояснения и примеры кода VBA.

Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.

Пожалуйста, оставьте комментарий ниже с любыми вопросами или предложениями. Спасибо!

Источник

Объект AutoFilter (Excel)

Представляет автофильтровку для указанного листа.

При использовании автофильтра с датами формат должен соответствовать разделителям дат на английском языке («/») вместо локальных параметров («.»). Допустимая дата будет «2/2/2/2007», тогда как «2.2.2007» является недопустимой.

Для работы с объектами (например, объектом Interior ) требуется добавить ссылку на объект . Дополнительные сведения о назначении ссылки на объект переменной или свойству см. в инструкции Set .

Пример

Используйте свойство AutoFilter объекта Worksheet , чтобы вернуть объект AutoFilter . Используйте свойство Filters для возврата коллекции отдельных фильтров столбцов. Используйте свойство Range , чтобы вернуть объект Range , представляющий весь отфильтрованный диапазон.

В следующем примере сохраняются критерии адреса и фильтрации для текущей фильтрации, а затем применяются новые фильтры.

Чтобы создать объект AutoFilter для листа, необходимо включить автоматическое фильтрацию для диапазона на листе вручную или с помощью метода AutoFilter объекта Range . В следующем примере используются значения, хранящиеся в переменных уровня модуля в предыдущем примере, для восстановления исходной автофильтрации на листе Crew.

Методы

Свойства

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Фильтры на VBA (AutoFilter Method): самое подробное руководство в рунете

Автор Дмитрий Якушев На чтение11 мин. Просмотров2.6k.

Итог: научиться создавать макросы, использовать фильтры на диапазоны и таблицы с помощью метода AutoFilter VBA. Статья содержит ссылки на примеры для фильтрации различных типов данных, включая текст, цифры, даты, цвета и значки.

Уровень мастерства: средний

Содержание

  1. Скачать файл
  2. Написание макросов для фильтров
  3. Макро-рекордер — твой друг (или враг)
  4. Метод автофильтрации
  5. Написание кода автофильтра
  6. Шаг 1: Ссылка на диапазон или таблицу
  7. Диапазоны или таблицы?
  8. 5 (или 6) параметров автофильтра
  9. Шаг 2: Параметр поля
  10. Шаг 3: Параметры критериев
  11. Общие правила дляCriteria1 и Criteria2
  12. Шаг 4: Параметр оператора
  13. Автофильтр не является дополнением
  14. Как установить номер поля динамически
  15. Используйте таблицы Excel с фильтрами
  16. Фильтры и типы данных
  17. Почему метод автофильтрации такой сложный?

Скачать файл

Файл Excel, содержащий код, можно скачать ниже. Этот файл содержит код для фильтрации различных типов данных и типов фильтров.

VBA AutoFilters Guide.xlsm (100.5 KB)

Написание макросов для фильтров

Фильтры являются отличным инструментом для анализа данных в Excel. Для большинства аналитиков и частых пользователей Excel фильтры являются частью нашей повседневной жизни. Мы используем раскрывающиеся меню фильтров для применения фильтров к отдельным столбцам в наборе данных. Это помогает нам связывать цифры с отчетами и проводить исследование наших данных.

Фильтрация также может быть трудоемким процессом. Особенно, когда мы применяем фильтры к нескольким столбцам на больших листах или фильтруем данные, чтобы затем копировать / вставлять их в другие листы или книги.

В этой статье объясняется, как создавать макросы для автоматизации процесса фильтрации. Это обширное руководство по методу автофильтра в VBA.

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

Макро-рекордер — твой друг (или враг)

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

Вот шаги для создания макроса фильтра с помощью устройства записи макросов:

  1. Включите рекордер макросов:
    1. Вкладка «Разработчик»> «Запись макроса».
    2. Дайте макросу имя, выберите, где вы хотите сохранить код, и нажмите ОК.
  2. Примените один или несколько фильтров, используя раскрывающиеся меню фильтров.
  3. Остановите рекордер.
  4. Откройте редактор VB (вкладка «Разработчик»> Visual Basic) для просмотра кода.

Если вы уже использовали макрос-рекордер для этого процесса, то вы знаете, насколько он может быть полезен. Тем более, что наши критерии фильтрации становятся более сложными.

Код будет выглядеть примерно так:

Sub Filters_Macro_Recorder()

‘ Filters_Macro_Recorder Macro

    ActiveSheet.ListObjects(«tblData»).Range.AutoFilter Field:=4, Criteria1:= _

        «Product 2»

    ActiveSheet.ListObjects(«tblData»).Range.AutoFilter Field:=4

    ActiveSheet.ListObjects(«tblData»).Range.AutoFilter Field:=5, Criteria1:= _

        «>=500″, Operator:=xlAnd, Criteria2:=»<=1000»

End Sub

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

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

Метод автофильтрации

Метод AutoFilter используется для очистки и применения фильтров к одному столбцу в диапазоне или таблице в VBA. Он автоматизирует процесс применения фильтров через выпадающие меню фильтров и делает, чтобы  все работало.

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

Написание кода автофильтра

Вот пошаговые инструкции по написанию строки кода для автофильтра.

Шаг 1: Ссылка на диапазон или таблицу

Метод AutoFilter является частью объекта Range. Поэтому мы должны ссылаться на диапазон или таблицу, к которым применяются фильтры на листе. Это будет весь диапазон, к которому применяются фильтры.

Следующие примеры включают / отключают фильтры в диапазоне B3: G1000 на листе автофильтра.

Sub AutoFilter_Range()

‘Автофильтр является членом объекта Range

  ‘Ссылка на весь диапазон, к которому применяются фильтры

  ‘Автофильтр включает / выключает фильтры, когда параметры не указаны.

  Sheet1.Range(«B3:G1000»).AutoFilter

  ‘Полностью квалифицированный справочник, начиная с уровня Workbook

  ThisWorkbook.Worksheets(«AutoFilter Guide»).Range(«B3:G1000»).AutoFilter

End Sub

Вот пример использования таблиц Excel.

Sub AutoFilter_Table()

‘Автофильтры на таблицах работают одинаково.

Dim lo As ListObject ‘Excel Table

  ‘Установить переменную ListObject (Table)

  Set lo = Sheet1.ListObjects(1)

  ‘Автофильтр является членом объекта Range

  ‘Родителем объекта Range является объект List

  lo.Range.AutoFilter

End Sub

Метод AutoFilter имеет 5 необязательных параметров, которые мы рассмотрим далее. Если мы не укажем ни один из параметров, как в приведенных выше примерах, метод AutoFilter включит / выключит фильтры для указанного диапазона. Это переключение. Если фильтры включены, они будут выключены, и наоборот.

Диапазоны или таблицы?

Фильтры работают одинаково как для обычных диапазонов, так и для таблиц Excel.

Я отдаю предпочтение методу использования таблиц, потому что нам не нужно беспокоиться об изменении ссылок на диапазон при увеличении или уменьшении таблицы. Однако код будет одинаковым для обоих объектов. В остальных примерах кода используются таблицы Excel, но вы можете легко изменить это для обычных диапазонов.

5 (или 6) параметров автофильтра

Метод AutoFilter имеет 5 (или 6) необязательных параметров, которые используются для указания критериев фильтрации для столбца. Вот список параметров.

Страница справки MSDN

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

Шаг 2: Параметр поля

Первый параметр — это Field. Для параметра Field мы указываем число, которое является номером столбца, к которому будет применяться фильтр. Это номер столбца в диапазоне фильтра, который является родителем метода AutoFilter. Это НЕ номер столбца на рабочем листе.

В приведенном ниже примере поле 4 является столбцом «Продукт», поскольку это 4-й столбец в диапазоне фильтра / таблице.

Фильтр столбца очищается, когда мы указываем только параметр Field, а другие критерии отсутствуют.

Мы также можем использовать переменную для параметра Field и установить ее динамически. Я объясню это более подробно ниже.

Шаг 3: Параметры критериев

Существует два параметра, которые можно использовать для указания фильтра Критерии, Criteria1 и Criteria2 . Мы используем комбинацию этих параметров и параметра Operator для разных типов фильтров. Здесь все становится сложнее, поэтому давайте начнем с простого примера.

‘Фильтровать столбец «Продукт» для одного элемента

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 2″

Это то же самое, что выбрать один элемент из списка флажков в раскрывающемся меню фильтра.

Общие правила для Criteria1 и Criteria2

Значения, которые мы указываем для Criteria1 и Criteria2, могут быть хитрыми. Вот несколько общих рекомендаций о том, как ссылаться на значения параметра Criteria.

  • Значением критерия является строка, заключенная в кавычки. Есть несколько исключений, когда критерии являются постоянными для периода времени даты и выше / ниже среднего.
  • При указании фильтров для отдельных чисел или дат форматирование чисел должно соответствовать форматированию чисел, применяемому в диапазоне / таблице.
  • Оператор сравнения больше / меньше чем также включен в кавычки перед числом.
  • Кавычки также используются для фильтров для пробелов «=» и не пробелов «<>».

‘Фильтр на дату, большую или равную 1 января 2015 г.

lo.Range.AutoFilter Field:=1, Criteria1:=»>=1/1/2015″

‘ Оператор сравнения> = находится внутри кавычек

‘ для параметра Criteria1.

‘ Форматирование даты в коде соответствует форматированию

‘ применяется к ячейкам на листе.

Шаг 4: Параметр оператора

Что если мы хотим выбрать несколько элементов из раскрывающегося списка фильтров? Или сделать фильтр для диапазона дат или чисел?

Для этого нам нужен Operator . Параметр Operator используется для указания типа фильтра, который мы хотим применить. Он может варьироваться в зависимости от типа данных в столбце. Для
Operator должна использоваться одна из следующих 11 констант.

Вот ссылка на страницу справки MSDN, которая содержит список констант для перечисления XlAutoFilterOperator .

Operator используется в сочетании с Criteria1 и / или Criteria2, в зависимости от типа данных и типа фильтра. Вот несколько примеров.

‘Фильтр для списка нескольких элементов, оператор — xlFilterValues

lo.Range.AutoFilter _

          Field:=iCol, _

          Criteria1:=Array(«Product 4», «Product 5», «Product 6»), _

          Operator:=xlFilterValues

‘Фильтр для диапазона дат (между датами), оператор xlAnd

lo.Range.AutoFilter _

          Field:=iCol, _

          Criteria1:=»>=1/1/2014″, _

          Operator:=xlAnd, _

          Criteria2:=»<=12/31/2015″

Это основы написания строки кода для метода AutoFilter. Будет сложнее с различными типами данных.

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

Автофильтр не является дополнением

При запуске строки кода автофильтра сначала удаляются все фильтры, примененные к этому столбцу (полю), а затем применяются критерии фильтра, указанные в строке кода.

Это означает, что это не дополнение. Следующие 2 строки НЕ создадут фильтр для Продукта 1 и Продукта 2. После запуска макроса столбец Продукт будет отфильтрован только для Продукта 2.

‘Автофильтр НЕ ДОБАВЛЯЕТ. Это сначала любые фильтры, применяемые

‘в столбце перед применением нового фильтра

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 3″

‘Эта строка кода отфильтрует столбец только для продукта 2

‘Фильтр для Продукта 3 выше будет очищен при запуске этой линии.

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 2″

Если вы хотите применить фильтр с несколькими критериями к одному столбцу, вы можете указать это с помощью параметров
Criteria и Operator .

Как установить номер поля динамически

Если мы добавим / удалим / переместим столбцы в диапазоне фильтра, то номер поля для отфильтрованного столбца может измениться. Поэтому я стараюсь по возможности избегать жесткого кодирования числа для параметра Field.

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

Sub Dynamic_Field_Number()

‘Методы, чтобы найти и установить поле на основе имени столбца.

Dim lo As ListObject

Dim iCol As Long

  ‘Установить ссылку на первую таблицу на листе

  Set lo = Sheet1.ListObjects(1)

  ‘Установить поле фильтра

  iCol = lo.ListColumns(«Product»).Index

  ‘Использовать функцию соответствия для регулярных диапазонов

  ‘iCol = WorksheetFunction.Match(«Product», Sheet1.Range(«B3:G3»), 0)

  ‘Использовать переменную для значения параметра поля

  lo.Range.AutoFilter Field:=iCol, Criteria1:=»Product 3″

End Sub

Номер столбца будет найден при каждом запуске макроса. Нам не нужно беспокоиться об изменении номера поля при перемещении столбца. Это экономит время и предотвращает ошибки (беспроигрышный вариант)!

Используйте таблицы Excel с фильтрами

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

  • Нам не нужно переопределять диапазон в VBA, поскольку диапазон данных изменяет размер (строки / столбцы добавляются / удаляются). На всю таблицу ссылается объект ListObject.
  • Данные в таблице легко ссылаться после применения фильтров. Мы можем использовать свойство DataBodyRange для ссылки на видимые строки для копирования / вставки, форматирования, изменения значений и т.д.
  • Мы можем иметь несколько таблиц на одном листе и, следовательно, несколько диапазонов фильтров. С обычными диапазонами у нас может быть только один отфильтрованный диапазон на лист.
  • Код для очистки всех фильтров в таблице легче написать.

Фильтры и типы данных

Параметры раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце. У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО различных комбинаций операторов и критериев для каждого типа фильтра.

Я создал отдельные посты для каждого из этих типов фильтров. Посты содержат пояснения и примеры кода VBA.

  • Как очистить фильтры с помощью VBA
  • Как отфильтровать пустые и непустые клетки
  • Как фильтровать текст с помощью VBA
  • Как фильтровать числа с помощью VBA
  • Как отфильтровать даты с помощью VBA
  • Как отфильтровать цвета и значки с помощью VBA

Файл в разделе загрузок выше содержит все эти примеры кода в одном месте. Вы можете добавить его в свою личную книгу макросов и использовать макросы в своих проектах.

Почему метод автофильтрации такой сложный?

Этот пост был вдохновлен вопросом от Криса, участника The VBA Pro Course. Комбинации Критерии и Операторы могут быть запутанными и сложными. Почему это?

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

Большая часть кода фильтра имеет смысл, но сначала может быть сложно разобраться. К счастью, у нас есть макро рекордер, чтобы помочь с этим.

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

Источник

Понравилась статья? Поделить с друзьями:
  • Vba excel удалить комментарии
  • Vba excel файлы примеров
  • Vba excel удалить колонки
  • Vba excel удалить значения ячеек
  • Vba excel удалить все пустые строки в excel