Функция СОПОСТАВЛЕНИЯ Excel, похоже, нарушена. Описание проблемы и детали расследования. Есть какое-нибудь объяснение или решение этому?
Я довольно интенсивный и опытный пользователь Excel, привыкший работать с функциями ИНДЕКСИРОВАНИЯ и СОПОСТАВЛЕНИЯ, а также со строками, поэтому я также привык к типичным проблемам с ошибками в функции СОПОСТАВЛЕНИЯ из-за различного форматирования ячеек, незамеченных пробелов и тому подобного. Я также знаком с множеством решений такого рода проблем, таких как преобразование текста в числа и наоборот, с помощью функций TEXT() или VALUE() или более простых подходов, таких как добавление --, +0, *1, "" & или другие аналогичные операции для преобразования между форматами. То, что я обнаружил на этот раз, было совершенно другим видом ошибки, которая зависит от значения без изменения формата.
В своей электронной таблице я просто пытался найти, какая строка списка значений в "см" соответствует значению, полученному в другом месте, которое было в "мм". Поэтому я, предположительно, просто должен был сопоставить входное значение, разделенное на 10. Поначалу это работало, пока я не понял, что это не работает для определенных значений. В первом на изображении ниже видно, что match не может найти значение "55,025", но без проблем находит "64,025", хотя последующие ячейки в списке просто содержат значение из B4 минус значение рядом с ними в столбце A.
После того, как я не смог отследить ошибку, я создал электронную таблицу, чтобы протестировать несколько различных комбинаций и попытаться определить шаблон поведения функции СООТВЕТСТВИЯ. Но, во всяком случае, это еще больше смутило меня, показав, что нет только он ведет себя по-разному с разными значениями, но различные способы преобразования текста в числа также не ведут себя согласованно. На самом деле я определил 6 различных возможных сценариев, основанных на том, какие значения фактически введены.
Трудно обобщить результаты, поэтому вам следует просто изучить электронную таблицу и провести в ней свои собственные тесты. Я просто объясню его структуру, показанную на рисунке ниже.
Базовым значением является значение ячейка D3 (серая), я просто добавил туда десятичные дроби, чтобы упростить ввод различных значений, введенных в B3 (синий). Ячейки оранжевого и желтого цветов в столбце D - это разные способы форматирования значения D3 (серого). То есть:
D7 ="" & D3/10
D11 =--D7
D15 =D3/10
Соответствует текстовому формату, текст преобразован в число и обычное число соответственно.
Зеленые ячейки внизу столбца D - это всего лишь список значений, в пределах которых выполняется поиск функцией СООТВЕТСТВИЯ, полученный путем вычитания значений из столбца C до значения в D18.
Далее справа (столбцы G:Q), строка 3 содержит СОВПАДЕНИЕ строк, которое должно найти искомое значение в зеленом массиве столбца D. В строке 5 указан тип модификации, реализованной для значений столбца D. Над ними (строки 6, 10, 14) выполняется проверка того, равны ли эти значения соответствующей ячейке в зеленом массиве столбца D. А ниже (строки 8, 12, 16) приведены фактические формулы СООТВЕТСТВИЯ для этих значений.
Под всем этим есть список различных значений, которые показывают каждый тип поведения, начиная от того, что они найдены в массиве независимо от изменений (если они являются числами), до того, что они вообще не найдены, с несколькими различными случаями между ними.
Вкладка "Testing_b" точно такая же, как вкладка "Тестирование", но значение для ячейки D18 вместо вставки из моей исходной электронной таблицы вводится вручную. Это приводит к другому набору странного поведения, даже несмотря на то, что первоначально вставленный предполагается, что значение должно быть идентичным значению предыдущей вкладки.
Вы можете загрузить таблицу ниже и проверить поведение различных перечисленных значений при вводе в ячейку B3 (синий). Допустимый диапазон в настоящее время составляет от 44 до 64.
Электронная таблица MATCH_ERRORS.xlsx
Я надеюсь, что кто-нибудь сможет найти какое-то объяснение всему этому.
*Редактировать (2020-05-07):
Возможные Проблемы С Округлением
Относительно округления проблемы как возможная основная причина, на которую указал Джастин Доуард, я заметил, что Excel, похоже, использует другой уровень точности при проверке того, равны ли две ячейки, чем при проверке соответствия двух ячеек (функция СООТВЕТСТВИЯ). Я только что провел простой тест, и эта разница составляет один или два порядка в зависимости от сравниваемых значений (рисунок ниже). Это все еще не объясняет, почему Excel каким-то образом изменяет фактическое значение ячейки с некоторым приближением, которое затем не соответствует предполагаемое значение этой ячейки. Значения, использованные в исходной задаче, даже близко не соответствуют уровню точности, при котором можно было бы ожидать возникновения потенциальных ошибок округления. Казалось бы, это просто указывает на, возможно, еще более серьезную основную проблему.