Включить условие ИЛИ в COUNTIF?


2

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

У меня есть столбец, который может содержать 0, 1 или более действительных токенов, а также 0, 1 или более недействительных токенов. Например, если A, B и C являются действительными токенами, а D, E и F являются недействительными, у меня могут быть данные, которые выглядят как в столбце «Token» в таблице ниже. Я добавил столбцы «ValidCount» и «Valid», чтобы показать разные интерпретации.

    ╔══════╦═══════╦════════════╦═══════╗
    ║ Строка # ║ Жетоны║ ДействительныйСчет ║ Действительный ║
    ╠══════╬═══════╬════════════╬═══════╣
    ║ 1 ║ A, E ║ 1 ║ True ║
    ║ 2 ║ ║ 0 ║ Неверно ║
    ║ 3 ║ B ║ 1 ║ Правда ║
    ║ 4 ║ F, G ║ 0 ║ Неверно ║
    ║ 5 ║ A, B, C ║ 3 ║ Верно ║
    ║ 6 ║ C ║ 1 ║ Правда ║
    ╚══════╩═══════╩════════════╩═══════╝

Я могу сосчитать экземпляры действительных токенов с помощью следующего (где необработанные данные находятся на листе с именем «Raw», токены находятся в столбце AD, а рассматриваемый токен находится в ячейке A30 на листе с именем «Summary»):

=COUNTIF(Raw!$AD$2:$AD$79,CONCATENATE("*",Summary!$A30,"*"))

Проблема в том, что если я делаю это для каждого действующего токена и суммирую их, я в итоге считаю общее количество действительных токенов. Я хочу получить количество ячеек, по крайней мере, с одним действительным токеном . Используя приведенный выше пример, правильный ответ - 4, а не 6.

Я хочу использовать такую ORфункцию:

=COUNTIF(Raw!$AD$2:$AD$79,OR(CONCATENATE("*",Summary!$A30,"*"),CONCATENATE("*",Summary!$A31,"*"),[...snip...]))

но это дает 0.

Есть ли способ сделать это? В идеале не прибегая к VBA.


1
Если ваши данные расположены так, как описано, почему не работает = COUNTIF ([ValidCount], "> 0")?
Дав

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

функции OR нужен аргумент, следующий за первой функцией, не удовлетворяющий критериям.
Рускес

Ответы:


2

Вот два возможных подхода к формуле: если «действительные токены» показаны (по одному в ячейках). Сводка! A30: A32, вы можете использовать эту версию

=SUMPRODUCT((ISNUMBER(SEARCH(Summary!A30,Raw!$AD$2:$AD$79))+ISNUMBER(SEARCH(Summary!A31,Raw!$AD$2:$AD$79))+ISNUMBER(SEARCH(Summary!A32,Raw!$AD$2:$AD$79))>0)+0)

или более легко «расширяемый» для большего диапазона критериев попробуйте эту формулу массива

=SUM((MMULT(ISNUMBER(SEARCH(TRANSPOSE(Summary!A30:A32),Raw!$AD$2:$AD$79))+0,{1;1;1})>0)+0)

подтверждено CTRL+SHIFT+ENTER

{1; 1; 1} должен соответствовать длине диапазона критериев, а TRANSPOSE требуется, только если диапазон критериев вертикальный .....


Вау, это чудовище формулы! Спасибо, что поделился!
Джерри

1

Вы могли бы найти все нули и вычесть это из общей суммы?

Я имею в виду:

=counta(Raw!$AD$2:$AD$79)-countif(Raw!$AD$2:$AD$79,0)

[Я предполагаю, что в диапазоне нет пустых ячеек AD2:AD79]

Кажется, это дает мне то, что ты хочешь получить. Не могли бы вы подтвердить?

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

Я бы предложил эту формулу в одном дополнительном столбце (ячейке C2):

=IF(AND(ISERROR(FIND("A",B2)),ISERROR(FIND("B",B2)),ISERROR(FIND("C",B2))),0,1)

Это дает, 0если какой-либо из A, B или C не находится в ячейке B2, и дает, 1если любой из них находится в ячейке B2.

Перетащите на дно. Строка состояния Excel дает вам сумму, или вы можете использовать =SUM()функцию в столбце.


В этом диапазоне есть пробелы и нулей нет.
Том Райт

@ TomWright Я предположил, что были нули, так как в вашей таблице образцов были нули? Кроме того, вы не упомянули, что добавили последние два столбца в свой ОП ... Не могли бы вы изменить свой пост, пожалуйста?
Джерри

Извините, да, объяснение таблицы с примерами стало более понятным.
Том Райт

@ TomWright Как насчет одного столбца? Я не думаю, что есть отдельные формулы, чтобы сделать это без использования VBA. Я отредактировал свой ответ.
Джерри

Вы можете сделать это с помощью одной формулы - см. Мой ответ
Барри Гудини

0

Моей первой мыслью было использование COUNTIFSфункции, но это ANDsкритерии вместе. Это ORправильная идея, но, как вы заметили, она не проверяет значение ячейки внутри критериев ИЛИ.

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

Sub CountTokens ()

    Dim считать как целое
    Дим токен как строка
    Дим токены как вариант

    Для каждой ячейки в Sheet1.Range («A1: A6»)
        tokens = Split (Cell.Value, ",")
        Для tIndex = LBound (токены) К UBound (токены)
            токен = токены (tIndex)
            Если токен = "A" Или токен = "B" Или токен = "C" Тогда
                count = count + 1
                Выход для
            End If
        Следующий индекс
    Следующая ячейка

    MsgBox "Count:" & count

End Sub
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.