Как запретить функции СЧЁТЕСЛИ интерпретировать текст как дату

Кажется, что 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 ненадежным в использовании, если нет способа, чтобы он совпадал только при точном текстовом совпадении.

Я не думаю, что есть способ сделать это без SUMPRODUCT и/или вспомогательного столбца.

Scott Craner 14.06.2019 02:56

по крайней мере, в листах Google форматирование ячейки как обычного текста вместо автоматического решает проблему

Jeremy Kahan 14.06.2019 03:13

измените формат ячейки A1 на 10+68, чтобы избежать путаницы с датой

Forward Ed 14.06.2019 06:46
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
3
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использование =SUM(IF(A1 = "10-68",1,0)), введенного в виде формулы массива (нажатием Ctrl+Shift+Enter), даст вам результат, который вы ищете.

Это в том же духе, что и СУММПРОИЗВ, формула типа массива. Это то же самое, что =SUMPRODUCT(--(A1 = "10-68")) Он повторяется, а не то, что хочет ОП.

Scott Craner 14.06.2019 05:03

В ОП ничего не упоминалось о формулах массива. SUMPRODUCT не обязательно подразумевает формулу массива.

Brian Camire 14.06.2019 05:15

Вы правы, что это моя интерпретация вопроса. Кстати, вашу сумму можно упростить: =SUM(--(A1 = "10-68")) Нет необходимости в ЕСЛИ.

Scott Craner 14.06.2019 05:19

Спасибо, но как OP я написал: «Я хочу знать, как решить эту проблему с помощью обычного использования CountIF». Я не имел в виду никакую другую формулу, UDF или массив. Массив не нужен, так как проблема решается JvdV без него. Я продолжаю учиться публиковать вопросы с конкретными параметрами, но сложно перечислить все, чтобы исключить. Однако оцените попытку.

pghcpa 25.06.2019 00:53
Ответ принят как подходящий

Пытаться:

=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.

Scott Craner 14.06.2019 18:26

Умная! Но формат строки поиска не ограничивается форматом ??-??. Второй сегмент может содержать от 1 до 4 символов. Выше от Скотта также умно, но эта формула намного сложнее, чем решение IF (ISNA (match....)) которое я нашел. Цель этого поста состояла в том, чтобы найти решение с «обычным» использованием CountIF, которое было бы проще или эквивалентно использованию Match. Но кажется, что Excel сначала интерпретирует как дату... мне кажется странным, что он это делает. Спасибо!

pghcpa 16.06.2019 08:14

@ScottCraner, можете ли вы пролить свет на поведение использования * в моих примерах данных? Почему это работает?

JvdV 16.06.2019 14:17

@pghcpa, если ваша единственная цель - узнать, есть ли он в столбце, а не количество раз, тогда совпадение - лучший метод. Если вам нужен счет, то да, у countif есть недостатки, которые вы описали. Excel не является базой данных и поэтому имеет ограничения. Есть обходной путь, описанный выше, но Excel предположит, что если вам нужна дополнительная функциональность, тогда можно использовать vba

Scott Craner 16.06.2019 17:18

@JvdV нашел ответ! Я не уверен, почему предшествующая звездочка работает, но, возможно, это заставляет Excel оценивать функцию как текст, а не дату. Отличная работа, поздравления и спасибо.

pghcpa 25.06.2019 00:37

@ScottCraner - я хорошо знаком с альтернативами CountIF и UDF, но я пытаюсь найти самое простое решение с самой простой для чтения формулой. Я не ожидал, что CountIF по умолчанию будет оценивать строку как дату, если строка оказалась возможной датой. Итак, просто искал, как получить ожидаемое поведение. JvdV нашел это. Я бы не подумал об этом. Теперь, когда я вижу это поведение, согласен, что Match более надежен, даже если формула становится более трудной для чтения.

pghcpa 25.06.2019 00:42

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