COUNTIF не может подсчитать непустые результаты формулы?

Я ищу критерий для использования в =countif(range_of_formulas, [criterion]) это определит непустые результаты формул. Я нашел довольно много таких, как "<>" , "<>"&"" , "<>""" , ">""" , "*" и многое другое (например, на SO здесь и здесь). Но каждый критерий, кажется, работает только в одних ситуациях, а не в других, и они все плохо в следующей ситуации:

enter image description here столбцы A и B имеют мой исходные данные. Столбец D представляет результаты формул, которые вы видите в столбце C. столбец F показывает результаты countif используя различные критерии (как показано в столбце E) для подсчета непустых результатов в столбце D. Ни один из них не приходит к правильному счету-5.

в моем исследовании (и в ответах на этот вопрос, прежде чем я отредактировал, чтобы сузить его) я видел много обходных путей, которые получат правильный счет. Но я спрашиваю, есть ли критерий, который будет работать в countif, или если countif не может надежно подсчитать не пустые результаты формулы?
(или, может быть, кто-то может сказать, при каких условиях он может или не может быть использован).

6 ответов


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

Я просто присоединил пустую строку к концу результата по первой формуле и завернул ее в скобки, чтобы сохранить excel счастливым:

=(IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"")&"")

теперь вы можете использовать подстановочные знаки для любого характер (?) и любой длины строки (*) вместе в качестве критериев для достижения желаемого итога 5:

=COUNTIF($D:$D,"?*")

enter image description here


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

в двойных кавычках оператор сравнения в начале может быть проанализирован: =, >, >=,

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

сравнения чисел игнорируют строки, а сравнения строк игнорируют числа.

">3" будет считать все числа больше 3. Он игнорирует все строки.

">c " будет считать все строки больше, чем c (то есть все, начиная с c, за которым следует другой символ или что-либо, начинающееся с более высокого символьного кода). Он игнорирует все числа.

">3* " будет считать все строки больше, чем символ 3.

когда вы пытаетесь сделать ">""", ""используется для обозначения" символа (потому что он находится в двойных кавычках в Формуле), поэтому сравнение, которое вы на самом деле делаете здесь: все больше, чем " символ. Подтяните диаграмму Unicode, и вы увидите только это ! меньше, чем ". Так что, если вы положили ! затем что-нибудь или " само по себе, если ваши данные, вы получите один меньше подсчета.

аналогично, " > """""" просто сравнивается со строкой, состоящей из двух двойных кавычек, а не нулевой строки.

Это невозможно передать нулевую строку в функцию COUNTIF.

вам понадобится другое решение:

  1. измените предыдущие операторы IF, чтобы вернуть любое значение, отличное от nullstring, которое может быть протестировано в инструкции COUNTIF. Вы даже можете использовать CHAR(1) чтобы отобразить непечатаемый символ, который кажется пустым, но все еще может быть исключен в COUNTIF:=COUNTIF(D1:D8,"<>"&CHAR(1))

  2. используйте несколько COUNTIFs, которые подсчитывают количество строк и количество номеров: =COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0") (>0 используется, предполагая, что есть только положительные числа, иначе вам также нужно будет добавить количество чисел, которые являются

  3. использовать другие функции, предложенные другими пользователями


Как уже было сказано, не без помощи. Итак;

вероятно, самый простой способ адаптировать это может быть:

=SUM(COUNTIF($D:$D,{">0",""}))

или

=SUM(COUNTIFS($D:$D,{">0",""}))

который добавит соответственно и даст вам ваш результат. Обратите внимание на разницу между тем, как этот COUNTIFS используется по сравнению с вашим и размещением {}.

приложить из: https://exceljet.net/formula/countifs-with-multiple-criteria-and-or-logic

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


Это должно работать:

=(COUNTA(range) - COUNTBLANK(range))

COUNTA-подсчитывает все ячейки с содержимым

COUNTBLANK-подсчитывает все ячейки, оценивающие как пустые

но остерегайтесь ячейки без содержимого, они увеличат COUNTBLANK, но не COUNTA, сорвав расчет.


COUNTIFS пример,

=COUNTIFS(A1:A8, "<>", B1:B8, 1)

еще один пример SUMPRODUCT,

=sumproduct(sign(len(d1:d10)))

Это зависит от того, как вы напишите вашу формулу.

изменение формулы If (), как показано ниже, и использование Countif, как указано, приведет к правильному ответу.

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"|^|")

=COUNTIF(C1:C8,"<>|^|")

или

Если вы не можете изменить формулу If (), вам нужно изменить Countif() на Sumproduct() для получения правильных результатов.

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"")

=SUMPRODUCT(--(TRIM($C:$C)<>""))