Множественная фильтрация Checkbox-ами
Xpert
Дата: Четверг, 28.05.2020, 15:19 |
Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Всем привет! Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще. Прошу вас, гуру: подскажите, куда копать?
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
Всем привет! Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще. Прошу вас, гуру: подскажите, куда копать?
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
Xpert
Ответить
Сообщение Всем привет! Пытаюсь сделать фильтр таблицы по датам, используя Checkbox-ы, но работает как-то некорректно. Например, январь-февраль-март не фильтрует вообще. Прошу вас, гуру: подскажите, куда копать? [vba]
Private Sub CheckBox1 _Click() If CheckBox1.Value = Тrue 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 = Тrue And CheckBox3.Value = Тrue 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 = Тrue And CheckBox2.Value = Тrue 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 = Тrue And CheckBox3.Value = Тrue 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 = Тrue And CheckBox2.Value = Тrue And CheckBox3.Value = Тrue 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
Группа: Админы
Ранг: Местный житель
Сообщений: 19517
Репутация:
4632
±
Замечаний:
±
Excel 365 & Mac Excel
Здравствуйте. При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок. А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Здравствуйте. При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок. А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть. Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Здравствуйте. При таком подходе надо начинать проверять с конца. То есть сначала проверить, не включены ли все 12 флажков, потом какие-то одиннадцать, и т.д. по убывающей. Очень много проверок. А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть. Автор - Pelena Дата добавления - 28.05.2020 в 17:48
InExSu
Дата: Четверг, 28.05.2020, 20:57 |
Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация:
96
±
Замечаний:
0% ±
Excel 2010, 365
Привет! Сбрасывать фильтр, формировать массив критериев, типа
AutoFilter Field:=1 , Operator:= _
xlFilterValues, Criteria2:=Array (1 , "1/31/2020" , 1 , "3/31/2020" , 1 , "5/19/2020" )
Привет! Сбрасывать фильтр, формировать массив критериев, типа
AutoFilter Field:=1 , Operator:= _
xlFilterValues, Criteria2:=Array (1 , "1/31/2020" , 1 , "3/31/2020" , 1 , "5/19/2020" )
InExSu
Разработчик Битрикс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
Группа: Админы
Ранг: Местный житель
Сообщений: 19517
Репутация:
4632
±
Замечаний:
±
Excel 365 & Mac Excel
Михаил, можете показать как правильно формировать массив критериев
в данном случае? У меня не получилось
Михаил, можете показать как правильно формировать массив критериев
в данном случае? У меня не получилось Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Михаил, можете показать как правильно формировать массив критериев
в данном случае? У меня не получилось Автор - Pelena Дата добавления - 28.05.2020 в 21:35
InExSu
Дата: Четверг, 28.05.2020, 21:47 |
Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация:
96
±
Замечаний:
0% ±
Excel 2010, 365
Не то, чтобы правильно :-) Как вариант:
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
Не то, чтобы правильно :-) Как вариант:
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
InExSu
Разработчик Битрикс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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация:
739
±
Замечаний:
0% ±
2010
Собрал конструкцию, может и не правильно но работает.
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
Учусь работать с массивами, но что то туго идёт.
Собрал конструкцию, может и не правильно но работает.
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
Учусь работать с массивами, но что то туго идёт. gling
ЯД-41001506838083
Ответить
Сообщение Собрал конструкцию, может и не правильно но работает.[vba]
Sub FiltrPoChekBoksu()Dim arr() As Variant ; j As Long n = 0 f = 1For i = 0 To 11 If ActiveSheet.OLEObjects("CheckBox" & i + 1).Object.Value = Тrue 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 IfNextIf n = 0 Then ActiveSheet.Range("$A$4:$G$100").AutoFilter Field :=1: Exit SubActiveSheet.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
Группа: Админы
Ранг: Местный житель
Сообщений: 19517
Репутация:
4632
±
Замечаний:
±
Excel 365 & Mac Excel
Спасибо! С утра разобралась А вчера переклинило: массив дат формирую, а единичку перед каждой датой поставить - уже никак)
Спасибо! С утра разобралась А вчера переклинило: массив дат формирую, а единичку перед каждой датой поставить - уже никак) Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Ответить
Сообщение Спасибо! С утра разобралась А вчера переклинило: массив дат формирую, а единичку перед каждой датой поставить - уже никак) Автор - Pelena Дата добавления - 29.05.2020 в 07:33
InExSu
Дата: Пятница, 29.05.2020, 07:43 |
Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 650
Репутация:
96
±
Замечаний:
0% ±
Excel 2010, 365
Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
Ответить
Xpert
Дата: Пятница, 29.05.2020, 07:46 |
Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Pelena , InExSu , огромное спасибо за участие! Очень интересные варианты.gling , супер!
Pelena , InExSu , огромное спасибо за участие! Очень интересные варианты.gling , супер!Xpert
Ответить
Сообщение Pelena , InExSu , огромное спасибо за участие! Очень интересные варианты.gling , супер!Автор - Xpert Дата добавления - 29.05.2020 в 07:46
Xpert
Дата: Пятница, 29.05.2020, 09:00 |
Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?
А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?Xpert
Сообщение отредактировал Xpert - Пятница, 29.05.2020, 09:33
Ответить
Сообщение А расширенным фильтром не хотите воспользоваться? В файле столбец О - это ячейки, привязанные к флажкам. А в столбце P формула для расширенного фильтра. Эти столбцы можно скрыть.
Елена, а можно ли как-то Ваш вариант модифицировать так, чтобы при всех снятых флажках, фильтр сбрасывался?Автор - Xpert Дата добавления - 29.05.2020 в 09:00
Pelena
Дата: Пятница, 29.05.2020, 10:42 |
Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19517
Репутация:
4632
±
Замечаний:
±
Excel 365 & Mac Excel
Можно. Перепишите формулу в ячейке P2
=ИЛИ(СУММПРОИЗВ(--(($O$1:$O$12 *СТРОКА($1:$12 ))=МЕСЯЦ($A5 )))>0;ИЛИ($O$1:$O$12 )=ЛОЖЬ)
Можно. Перепишите формулу в ячейке P2
=ИЛИ(СУММПРОИЗВ(--(($O$1:$O$12 *СТРОКА($1:$12 ))=МЕСЯЦ($A5 )))>0;ИЛИ($O$1:$O$12 )=ЛОЖЬ)
Pelena
"Черт возьми, Холмс! Но как??!!" Ю-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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 117
Репутация:
0
±
Замечаний:
0% ±
Excel 2013
Pelena , спасибо!
Ответить
Сообщение Pelena , спасибо!Автор - Xpert Дата добавления - 29.05.2020 в 11:23