Вопрос или проблема
Сегодня я допустил опечатку, когда написал =ISNUMBER(A2\)
. Я ожидал, что Excel выдаст ошибку, но этого не произошло – вместо этого он вычислил формулу так, как будто обратный слэш не был там. Это работает для некоторых функций, но не для других. =COUNTIF(B:B,A2\)
работает, но =LEN(A2\)
выдает ошибку. Это, похоже, работает только для ссылки на диапазон или имя, за которым следует закрывающая скобка для определённых функций.
Почему Excel не выдает ошибку в этом случае? Существует ли какая-то функциональность, о которой я не знаю, или у этой нотации есть какая-то другая цель?
В Excel обратный слэш используется как один из нескольких символов экранирования; в частности, он используется в строках настройки формата для создания литералов.
Еще одной функцией, которая включает использование обратных слешей специфически в контексте формульных входных данных, является функция управления name
в Excel, в которой обратные слеши являются допустимыми символами (на самом деле, они в противном случае не распознаются формулами Excel). Это приводит меня к следующей гипотезе:
- Когда вводится в формулу, вне синтаксического контекста пользовательского форматирования данных или последовательного экранирования…
- Excel не распознает “\” как специальный символ (только как символ экранирования).
- Excel распознает “\” только как часть
name
. - Таким образом, во всех случаях, где используется “\”, Excel интерпретирует ввод как ссылку на
name
.
Чтобы подтвердить свою гипотезу, вы можете наблюдать за оценкой формул для каждой из формул, которые вы привели: =ISNUMBER(A2\)
=COUNTIF(B:B,A2\)
=LEN(A2\)
. Обратите внимание, что при оценке все три функции приводят к ошибке #NAME?
.
Теперь, чтобы ответить на другую часть сообщения автора: почему функции, кажется, обрабатывают ошибку непоследовательно? Здесь я снова предлагаю свою личную гипотезу: я считаю, что это связано с самими функциями или, точнее, с категориальной группировкой функций Excel.
В рамках Excel специфически функция LEN()
относится к категории функций TEXT
, т.е. она рассматривается как функция манипуляции строками или запроса. Когда возникает ошибка для этой категории функций, она может только вызвать исключение (в большинстве стандартных случаев использования).
С другой стороны, обе функции ISNUMBER()
и COUNTIF()
относятся к категории функций LOGIC
, т.е. они являются функциями условной оценки, которые также связаны с логическими функциями. Теперь, как оказывается, существует определённая синтаксическая конвенция, которая обычно наблюдается в нескольких основных языках программирования (например, Python и т.д.): логическое FALSE
может быть выражено как числовое 0
, так же как логическое TRUE
может быть выражено как числовое 1
. Это, предположительно, связано с природой двоичного представления TRUE или FALSE, представленным как 1 или 0, но в контексте ISNUMBER()
ожидаемый вывод является чисто логическим, тогда как ожидаемый вывод для COUNTIF()
является числовым, но также и логическим (замечание: последнее заключение основано исключительно на моей собственной спекуляции). В поддержку своей гипотезы, если вы введете число в ячейку B1
, а затем назовете ячейку B1
“A2\”, обратите внимание, что все три функции сразу изменят свои выходные значения:
Превращая комментарий @Darren Bartrup-Cook в ответ, A2\
дает ошибку #NAME?
, но ISNUMBER()
может обрабатывать ошибки #NAME?
, и результаты случайно совпали с тем, что я ожидал. Я никогда не проверял, зависели ли мои формулы от ячейки A2 так, как я думал.
Ответ или решение
Вопрос о том, почему формулы в Excel, содержащие обратную косую черту перед закрывающей скобкой, не вызывают ошибок, требует детального рассмотрения. Рассмотрим формулы, которые были приведены в вашем примере: =ISNUMBER(A2\)
, =COUNTIF(B:B,A2\)
и =LEN(A2\)
.
Что такое обратная косая черта в Excel?
В Excel обратная косая черта (\
) не является стандартным символом в формулах. Этот символ используется в других контекстах, например, в программировании или в некоторых форматах для указания специальных символов (например, в строках). Однако в Excel он также может быть интерпретирован не совсем так, как это ожидается.
Почему Excel не выдает ошибку?
-
Обработка ошибок:
- Формула
=ISNUMBER(A2\)
будет возвращать#NAME?
, когдаA2\
воспринимается как имя, которое не определено. Однако функцияISNUMBER()
может обрабатывать ошибки других функций и возвращатьFALSE
, если входные данные не являются числом. - В случае
=COUNTIF(B:B, A2\)
, Excel обрабатываетA2\
как имя диапазона. Если оно не определено, вы все равно получаете логическое значение (0 или 1), указывающее на количество совпадений, но при этом может возникнуть#NAME?
. - В конце концов,
=LEN(A2\)
не имеет логической альтернативы и не может обрабатывать ошибку как числовое значение, что обуславливает появление ошибки.
- Формула
-
Категория функций:
- Функции, такие как
ISNUMBER()
иCOUNTIF()
, принадлежат к логическим или вычислительным функциям, которые могут возвращать значения даже в случае ошибок в аргументах. Например,ISNUMBER()
возвращаетFALSE
, когда аргумент не является числом, в то время какCOUNTIF()
возвращает 0, если не найдено совпадений. - В то время как функция
LEN()
, относящаяся к манипуляции с текстом, не предоставляет аналогичной обработки для своих аргументов и, следовательно, генерирует ошибку.
- Функции, такие как
Вывод
Таким образом, использование обратной косой черты перед закрывающей скобкой в Excel не приводит к ошибке в ряде случаев, потому что Excel интерпретирует её как часть имени или диапазона. Это зависит от характера самой функции и её способности обрабатывать ошибки в отличие от других функций. Если вы часто работаете с такими формулами, стоит быть внимательным к этому аспекту.
Понимание и внимательное отношение к тому, как Excel обрабатывает формулы, ошибки и различные типы данных, поможет вам избежать путаницы в будущем и повысит эффективность работы с программой.