Как я могу использовать функцию фильтра в Excel для фильтрации на основе выбора, в том числе «ВСЕ»?

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

Я могу сделать это для одного выбора, используя:

=FILTER(A7:A10,A7:A10=b2,A7:A10)

но, похоже, не работает, когда я должен был использовать несколько вариантов:

=FILTER(A7:A10,(A7:A10=b2,A7:A10)*(B7:B10=b3,B7:B10))

или

=FILTER(A7:A10,(A7:A10=b2)*(B7:B10=b3),A7:A10)
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
0
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте использовать следующую формулу:


=LET(
     α, A7:B10,
     λ, LAMBDA(δ,ε,ABS(OR((δ  = "ALL"),ISBLANK(δ))-(ε=δ))),
     FILTER(α,λ(B2,TAKE(α,,1))*λ(B3,TAKE(α,,-1))))

b3 тоже может быть «всем». К вашему сведению, в моем отчете также есть много вариантов выбора, так что чем проще, тем лучше :-)

andy leary 04.07.2024 09:35

@andyleary, какие все условия. Возможно ли, что будут только ALL для Name: или только для LeaderALL?

Mayukh Bhattacharya 04.07.2024 09:37

Имя может быть All, a или b. Лидером может быть All, 1, 2 или 3.

andy leary 04.07.2024 09:40

@andyleary, но никогда не бывает пустым, верно?

Mayukh Bhattacharya 04.07.2024 09:40

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

andy leary 04.07.2024 10:23

@andyleary у меня есть для тебя обновление, не стесняйся протестировать!!

Mayukh Bhattacharya 04.07.2024 15:56
Ответ принят как подходящий

Показать все данные, если критерии фильтра «Все» или пустые

=LET(data,A7:B10,crit,B2:B3,
    OneOrFilter,LAMBDA(array,crit,IF(OR(crit = "All",crit = ""),1,array=crit)),
    nf,OneOrFilter(CHOOSECOLS(data,1),INDEX(crit,1)),
    lf,OneOrFilter(CHOOSECOLS(data,2),INDEX(crit,2)),
    IF(AND(nf=1,lf=1),data,FILTER(data,nf*lf,"")))

то есть

=LET(
    OneOrFilter,LAMBDA(array,crit,IF(OR(crit = "All",crit = ""),1,array=crit)),
    nf,OneOrFilter(A7:A10,B2),
    lf,OneOrFilter(B7:B10,B3),
    IF(AND(nf=1,lf=1),A7:B10,FILTER(A7:B10,nf*lf,"")))
  • Функция OneOrFilter возвращает либо 1, если критерием является «Все» или пустое значение, либо массив TRUE/FALSE, как результат сравнения столбца с критерием.
  • В последнем операторе проверьте, соответствуют ли результаты для всех столбцов (их может быть больше двух) 1 когда требуется показать все данные. В противном случае покажите отфильтрованные данные.

include_all, SEQUENCE(ROWS(data), , 1, 0) = 1 (TRUE) для всех строк.

=LAMBDA(data, crit_1, crit_2,
    LET(
        include_all, SEQUENCE(ROWS(data), , 1, 0),
        all_or_crit, LAMBDA(col_num, crit,
            IF(
                OR(LEN(TRIM(crit)) = 0, TRIM(crit) = "ALL"),
                include_all,
                INDEX(data, , col_num) = crit
            )
        ),
        FILTER(
            data,
            all_or_crit(1, crit_1) *
                all_or_crit(2, crit_2)
        )
    )
)(A7:B10, B2, B3)

Частичное совпадение

Возможность частичного совпадения (без учета регистра с помощью SEARCH) путем ввода текста критерия с помощью *:

=LAMBDA(data, crit_1, crit_2,
    LET(
        include_all, SEQUENCE(ROWS(data), , 1, 0),
        all_or_crit, LAMBDA(col_num, crit,
            IFS(
                OR(
                    LEN(TRIM(crit)) = 0,
                    TRIM(crit) = "ALL"
                ),
                include_all,
                ISNUMBER(SEARCH("~*", crit)),
                ISNUMBER(
                    SEARCH(crit, INDEX(data, , col_num))
                ),
                TRUE,
                INDEX(data, , col_num) = crit
            )
        ),
        FILTER(
            data,
            all_or_crit(1, crit_1) *
                all_or_crit(2, crit_2)
        )
    )
)(A7:B10, B2, B3)

Другие вопросы по теме