Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Множественная фильтрация Checkbox-ами - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Множественная фильтрация Checkbox-ами (Макросы/Sub)
Множественная фильтрация Checkbox-ами
Xpert Дата: Четверг, 28.05.2020, 15:19 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 115
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем привет!
Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще.
Прошу вас, гуру: подскажите, куда копать?
[vba]
Код

Private Sub CheckBox1_Click()
        If CheckBox1.Value = True Then
     ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020")
   ElseIf CheckBox1.Value = True And CheckBox3.Value = True Then
   ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020")
        ElseIf CheckBox1.Value = True And CheckBox2.Value = True Then
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020")
       ElseIf CheckBox2.Value = True And CheckBox3.Value = True Then
       ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "2/28/2020", 1, "3/31/2020")
     ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020", 1, "3/31/2020")
            Else: ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1
        End If
    End Sub
[/vba]
К сообщению приложен файл: PRIMER.xlsm (53.3 Kb)
 
Ответить
СообщениеВсем привет!
Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще.
Прошу вас, гуру: подскажите, куда копать?
[vba]
Код

Private Sub CheckBox1_Click()
        If CheckBox1.Value = True Then
     ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020")
   ElseIf CheckBox1.Value = True And CheckBox3.Value = True Then
   ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020")
        ElseIf CheckBox1.Value = True And CheckBox2.Value = True Then
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020")
       ElseIf CheckBox2.Value = True And CheckBox3.Value = True Then
       ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "2/28/2020", 1, "3/31/2020")
     ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1 'clears filter
        ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
            xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "2/28/2020", 1, "3/31/2020")
            Else: ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1
        End If
    End Sub
[/vba]

Автор - Xpert
Дата добавления - 28.05.2020 в 15:19
Pelena Дата: Четверг, 28.05.2020, 17:48 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок.

А расширенным фильтром не хотите воспользоваться?
В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
К сообщению приложен файл: 9498881.xlsm (53.7 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок.

А расширенным фильтром не хотите воспользоваться?
В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.

Автор - Pelena
Дата добавления - 28.05.2020 в 17:48
InExSu Дата: Четверг, 28.05.2020, 20:57 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!

Сбрасывать фильтр, формировать массив критериев, типа
[vba]
Код
AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020", 1, "5/19/2020")
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!

Сбрасывать фильтр, формировать массив критериев, типа
[vba]
Код
AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(1, "1/31/2020", 1, "3/31/2020", 1, "5/19/2020")
[/vba]

Автор - InExSu
Дата добавления - 28.05.2020 в 20:57
Pelena Дата: Четверг, 28.05.2020, 21:35 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Михаил, можете показать как правильно
формировать массив критериев
в данном случае? У меня не получилось :(


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМихаил, можете показать как правильно
формировать массив критериев
в данном случае? У меня не получилось :(

Автор - Pelena
Дата добавления - 28.05.2020 в 21:35
InExSu Дата: Четверг, 28.05.2020, 21:47 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
как правильно

Не то, чтобы правильно :-)
Как вариант:
[vba]
Код
Sub Filter_Array()
  Dim a1 As Variant
  ' нужно будет найти значения дней для месяцев
  ' массив нужно будет заполнять циклом
  a1 = Array(1, "2/28/2020", 1, "3/31/2020")
  ActiveSheet.ShowAllData
  ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1, Operator:= _
    xlFilterValues, Criteria2:=a1
End Sub
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
как правильно

Не то, чтобы правильно :-)
Как вариант:
[vba]
Код
Sub Filter_Array()
  Dim a1 As Variant
  ' нужно будет найти значения дней для месяцев
  ' массив нужно будет заполнять циклом
  a1 = Array(1, "2/28/2020", 1, "3/31/2020")
  ActiveSheet.ShowAllData
  ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1, Operator:= _
    xlFilterValues, Criteria2:=a1
End Sub
[/vba]

Автор - InExSu
Дата добавления - 28.05.2020 в 21:47
gling Дата: Пятница, 29.05.2020, 00:45 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Собрал конструкцию, может и не правильно но работает.[vba]
Код
Sub FiltrPoChekBoksu()
Dim arr() As Variant, j As Long
n = 0
f = 1
For i = 0 To 11
    If ActiveSheet.OLEObjects("CheckBox" & i + 1).Object.Value = True Then
    j = Application.EoMonth("1/01/2020", i)
    ReDim Preserve arr(f)
    arr(n) = 1
    arr(n + 1) = Application.Text(j, "MM/DD/YYYY")
    f = f + 2
    n = n + 2
    End If
Next
If n = 0 Then ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1: Exit Sub
ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(arr())
End Sub

[/vba]Учусь работать с массивами, но что то туго идёт.
К сообщению приложен файл: 4010100.xlsm (56.1 Kb)


ЯД-41001506838083
 
Ответить
СообщениеСобрал конструкцию, может и не правильно но работает.[vba]
Код
Sub FiltrPoChekBoksu()
Dim arr() As Variant, j As Long
n = 0
f = 1
For i = 0 To 11
    If ActiveSheet.OLEObjects("CheckBox" & i + 1).Object.Value = True Then
    j = Application.EoMonth("1/01/2020", i)
    ReDim Preserve arr(f)
    arr(n) = 1
    arr(n + 1) = Application.Text(j, "MM/DD/YYYY")
    f = f + 2
    n = n + 2
    End If
Next
If n = 0 Then ActiveSheet.Range("$A$4:$G$100").AutoFilter Field:=1: Exit Sub
ActiveSheet.Range("$A$4:$G$113").AutoFilter Field:=1, Operator:= _
        xlFilterValues, Criteria2:=Array(arr())
End Sub

[/vba]Учусь работать с массивами, но что то туго идёт.

Автор - gling
Дата добавления - 29.05.2020 в 00:45
Pelena Дата: Пятница, 29.05.2020, 07:33 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Как вариант
Спасибо! С утра разобралась :) А вчера переклинило: массив дат формирую, а единичку перед каждой датой поставить - уже никак)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
Как вариант
Спасибо! С утра разобралась :) А вчера переклинило: массив дат формирую, а единичку перед каждой датой поставить - уже никак)

Автор - Pelena
Дата добавления - 29.05.2020 в 07:33
InExSu Дата: Пятница, 29.05.2020, 07:43 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
С утра разобралась

Пожалуйста!
Сон — ресурс мозга программиста


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
Сообщение
С утра разобралась

Пожалуйста!
Сон — ресурс мозга программиста

Автор - InExSu
Дата добавления - 29.05.2020 в 07:43
Xpert Дата: Пятница, 29.05.2020, 07:46 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 115
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, InExSu, огромное спасибо за участие!
Очень интересные варианты.
gling, супер!
 
Ответить
СообщениеPelena, InExSu, огромное спасибо за участие!
Очень интересные варианты.
gling, супер!

Автор - Xpert
Дата добавления - 29.05.2020 в 07:46
Xpert Дата: Пятница, 29.05.2020, 09:00 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 115
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
А расширенным фильтром не хотите воспользоваться?
В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.

Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?


Сообщение отредактировал Xpert - Пятница, 29.05.2020, 09:33
 
Ответить
Сообщение
А расширенным фильтром не хотите воспользоваться?
В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.

Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?

Автор - Xpert
Дата добавления - 29.05.2020 в 09:00
Pelena Дата: Пятница, 29.05.2020, 10:42 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Можно. Перепишите формулу в ячейке P2
Код
=ИЛИ(СУММПРОИЗВ(--(($O$1:$O$12*СТРОКА($1:$12))=МЕСЯЦ($A5)))>0;ИЛИ($O$1:$O$12)=ЛОЖЬ)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМожно. Перепишите формулу в ячейке P2
Код
=ИЛИ(СУММПРОИЗВ(--(($O$1:$O$12*СТРОКА($1:$12))=МЕСЯЦ($A5)))>0;ИЛИ($O$1:$O$12)=ЛОЖЬ)

Автор - Pelena
Дата добавления - 29.05.2020 в 10:42
Xpert Дата: Пятница, 29.05.2020, 11:23 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 115
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Pelena, спасибо!
 
Ответить
СообщениеPelena, спасибо!

Автор - Xpert
Дата добавления - 29.05.2020 в 11:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Множественная фильтрация Checkbox-ами (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!