Если я использую встроенную функцию sumif (Excel Microsoft Office Home & Student 2016 версии 1708), я получаю следующее поведение:
amount description
4 '<Sydney
4 '<Melbourne
=sumif(b1:b3,"'<Sydney",a1:a3)
Sumif возвращает 8.
Это неверно. Sumif должен возвращать 4.
Обратите внимание на использование символа ' для экранирования строки при вводе текста в ячейку.
Есть идеи, что я делаю не так?
Стоит отметить, что проблема, по-видимому, связана с использованием угловой скобки (char(60)). Я понимаю, что я мог бы обойти эту проблему с помощью функции substitute(), но я хотел бы понять, в чем причина этой проблемы и как заставить Excel обрабатывать char(60) как строку.
Есть идеи?
Обратите внимание - проблем с функцией sumif не возникает, если используется только дефис (char(45)). Например:
amount description
4 '-Sydney
4 '-Melbourne
=sumif(b1:b3,"'-Sydney",a1:a3)
Это правильно дает в сумме 4.
решение1
Проблема заключается в том,
=sumif(b1:b3,"<Sydney",a1:a3)
(Я предполагаю, что параметр условия "<Sydney"
не "'<Sydney"
указан в вопросе, поскольку он вернет 0.)
Параметр условия будет рассматривать начальный символ <
как сравнение "меньше чем". Поэтому условие "<Sydney"
будет интерпретироваться как "меньше, чем строка" Sydney
на ее значение ASCII (или значение Unicode?). Поэтому строки с начальными символами A
до R
, и <
все "меньше, чем" строка Sydney
.
Чтобы устранить проблему, можно изменить функцию следующим образом:
=sumif(b1:b3,"=<Sydney",a1:a3)
Параметр =
in condition сообщит Excel «суммировать только ячейкиравнов <Sydney
, таким образом возвращая правильный результат.
Для дополнительной иллюстрации попробуйте использовать следующие примеры данных:
[Col A] [Col B]
[Row 1] 1 <
[Row 2] 2 A
[Row 3] 4 S
[Row 4] 8 Z
=SUMIF(B1:B4,"<S",A1:A4) [3]
=SUMIF(B1:B4,"<=S",A1:A4) [7]
=SUMIF(B1:B4,"=S",A1:A4) [4]
=SUMIF(B1:B4,">S",A1:A4) [8]
=sumif(b1:b3,"-Sydney",a1:a3)
работает так, как и ожидалось, as -
ничего не значит, и поэтому Excel sumif
по умолчанию сравнивает каждую ячейку в диапазоне B1:B3 со всей строкой -Sydney
и суммирует только в том случае, если две строки идентичны.