Кажется, что CountIF
вернет неправильные результаты, если целевой массив содержит текст, который непреднамеренно выглядит как дата. Я долго искал решение, но даже не нашел никого с такой же проблемой.
Чтобы воспроизвести проблему:
Ячейка A1
: 10-1968 (как текст, может предваряться апострофом)
Ячейка A2
: =COUNTIF(A1,"=10-68")
Ячейка A2
вернет 1, потому что она интерпретирует A1 как содержащую дату (1 октября 1968 г.), даже если она отформатирована как текст. В моем случае значение 10-1968 — это офис №10, проект №1968 (и к датам отношения не имеет).
Я пробовал различные комбинации функции TEXT
и функции LEFT
без каких-либо улучшений. Я думаю, если это будет похоже на свидание, CountIF
увидит это именно так. Как я могу предотвратить такое поведение?
Примечание. Я не хочу использовать SumProduct
или писать UDF. И я решил проблему с MATCH
, которая возвращает NA
, поэтому нужно было обернуть это в ISNA
. Но это делает формулу гораздо более сложной, и я хочу знать, как решить ее с помощью обычного использования CountIF
.
Кто знает, когда строка может выглядеть как дата? Кажется, что это делает CountIf
ненадежным в использовании, если нет способа, чтобы он совпадал только при точном текстовом совпадении.
по крайней мере, в листах Google форматирование ячейки как обычного текста вместо автоматического решает проблему
измените формат ячейки A1 на 10+68, чтобы избежать путаницы с датой
Использование =SUM(IF(A1 = "10-68",1,0))
, введенного в виде формулы массива (нажатием Ctrl+Shift+Enter), даст вам результат, который вы ищете.
Это в том же духе, что и СУММПРОИЗВ, формула типа массива. Это то же самое, что =SUMPRODUCT(--(A1 = "10-68"))
Он повторяется, а не то, что хочет ОП.
В ОП ничего не упоминалось о формулах массива. SUMPRODUCT
не обязательно подразумевает формулу массива.
Вы правы, что это моя интерпретация вопроса. Кстати, вашу сумму можно упростить: =SUM(--(A1 = "10-68"))
Нет необходимости в ЕСЛИ.
Спасибо, но как OP я написал: «Я хочу знать, как решить эту проблему с помощью обычного использования CountIF». Я не имел в виду никакую другую формулу, UDF или массив. Массив не нужен, так как проблема решается JvdV без него. Я продолжаю учиться публиковать вопросы с конкретными параметрами, но сложно перечислить все, чтобы исключить. Однако оцените попытку.
Пытаться:
=COUNTIF(A1:A5,"*10-68")
Использование подстановочного знака звездочки *
заставит COUNTIF()
работать. Волшебным образом он получит правильный результат. Это кажется подходящим вариантом в вашей ситуации, поскольку у вас будет только два числа перед вашим первым -
. Звездочка перед этим не повредит. Похоже, что Excel начинает работать только с истинными текстовыми строками в случае использования подстановочных знаков в COUNTIF()
. У меня самого нет этому объяснения.
Другой вариант, как упоминалось ранее, — это использование COUNTIFS()
с подстановочным знаком ?
, например:
=COUNTIFS(A1,"10-68",A1,"??-??")
Пример:
Формула в B1
:
=COUNTIF(A1:A5,"*10-68")
Или
=COUNTIFS(A1:A5,"10-68",A1:A5,"??-??")
Опираясь на это, если поместить искомое значение в ячейку, скажем, C1, то эта формула массива создаст ??-??
на основе ввода: =COUNTIFS(A:A,C1,A:A,CONCAT(IF(MID(C1,ROW($XFD$1:INDEX($XFD:$XFD,LEN(C1))),1) = "-","-","?")))
Поскольку он повторяет только длину строки, это не будет слишком облагать налогом вычисление. . Но для этого требуется формула CONCAT.
Умная! Но формат строки поиска не ограничивается форматом ??-??. Второй сегмент может содержать от 1 до 4 символов. Выше от Скотта также умно, но эта формула намного сложнее, чем решение IF (ISNA (match....)) которое я нашел. Цель этого поста состояла в том, чтобы найти решение с «обычным» использованием CountIF, которое было бы проще или эквивалентно использованию Match. Но кажется, что Excel сначала интерпретирует как дату... мне кажется странным, что он это делает. Спасибо!
@ScottCraner, можете ли вы пролить свет на поведение использования *
в моих примерах данных? Почему это работает?
@pghcpa, если ваша единственная цель - узнать, есть ли он в столбце, а не количество раз, тогда совпадение - лучший метод. Если вам нужен счет, то да, у countif есть недостатки, которые вы описали. Excel не является базой данных и поэтому имеет ограничения. Есть обходной путь, описанный выше, но Excel предположит, что если вам нужна дополнительная функциональность, тогда можно использовать vba
@JvdV нашел ответ! Я не уверен, почему предшествующая звездочка работает, но, возможно, это заставляет Excel оценивать функцию как текст, а не дату. Отличная работа, поздравления и спасибо.
@ScottCraner - я хорошо знаком с альтернативами CountIF и UDF, но я пытаюсь найти самое простое решение с самой простой для чтения формулой. Я не ожидал, что CountIF по умолчанию будет оценивать строку как дату, если строка оказалась возможной датой. Итак, просто искал, как получить ожидаемое поведение. JvdV нашел это. Я бы не подумал об этом. Теперь, когда я вижу это поведение, согласен, что Match более надежен, даже если формула становится более трудной для чтения.
Я не думаю, что есть способ сделать это без SUMPRODUCT и/или вспомогательного столбца.