Аудит поведения: текущая формула дважды повторяет один и тот же поиск, но не соответствует указанному правилу для неизвестного идентификатора. XLOOKUP возвращает 0, когда ключ не найден, а внешнее сравнение затем воспринимает его как допустимую нулевую цену. LET, сохраняющий поведение, сохранил бы этот дефект, поэтому исправление нужно указать отдельно.
Исправленная формула LET для H2: =IF(B2="","",LET(productId,B2,quantity,E2,unitPrice,XLOOKUP(productId,Products!$A$2:$A$2000,Products!$D$2:$D$2000,NA(),0),IFERROR(IF(unitPrice>0,ROUND(quantity*unitPrice,2),0),"Проверить"))). productId и quantity документируют относительные входные значения строки; unitPrice выполняет один точный поиск по фиксированным исходным диапазонам. NA() направляет неизвестный ключ в IFERROR, тогда как реальный числовой ноль по-прежнему возвращает 0. Намеренное изменение поведения для неизвестного идентификатора: 0 → «Проверить». Поведение для пустого значения, реального нуля, округления и ошибки входных данных сохранено.
Совместимость: формула допустима для указанных сред Microsoft 365; исправленную версию без LET следует сохранять только для будущего получателя, у которого LET не поддерживается. Производительность может улучшиться, поскольку два поиска на непустую строку заменены одним, однако без измерения книги нельзя называть процент ускорения.
Тесты эквивалентности и исправления: P-10 ×3 → 37.50 как в исправленной старой версии, так и в LET; P-FREE ×2 → 0; P-99 → «Проверить» (намеренное исправление); пустой идентификатор → пусто без поиска; количество «three» при допустимой положительной цене → «Проверить»; при копировании в H3 productId и quantity меняются на B3/E3, а диапазоны Products остаются фиксированными. Кроме того, отдельно проверьте повторяющиеся идентификаторы продуктов, прежде чем полагаться на поиск одного результата.