Как суммировать пустые и нулевые ячейки в sumif отдельно?

Автор Umbrella, 7 апреля 2013, 12:53

0 Пользователи и 1 гость просматривают эту тему.

Umbrella

В MC экселе есть файл со структурой:
   D;       E;         F;          G
1
2
3  N сч;  сумма;   дата;     пришло
4  1        10.000   23.мар   10.000   # G4 =ЕСЛИ(F4;E4;0)
5  2          5.000   00.янв        0     # F5 введено значение "0"
6  3          3.000                    0     # F6 пустая ячейка
7  4         13.000  04.апр    13.000

Есть ячейки с суммами:
Всего:   31.000   =СУММ(E4:E409)
Ждем:     3.000   =СУММЕСЛИ(F4:F409;"";E4:E409)
Аннулир: 5.000   =СУММЕСЛИ(F4:F409;0;E4:E409)
Пришло: 23.000   =СУММ(G4:G409)

Открываю в LibreCalc 4.0.2:
"Ждем" - пустое. Убираю кавычки - становится равным "Аннулир". sumif(f4:f409;isblank();..) ругается на отсутствие параметра. Как получить сумму для пустых (но ненулевых!) ячеек?

Вместо даты "00.янв" (00.01.1900) в экселе, отображается "30.дек" (30.12.1899) в Lcalc'е. Глазом такое НЕ видится, дата вполне обычная, хотя в экселе сразу видна несуществующая дата по "00". Чем заменить значение?

Успехов, Alexey.

JohnSUN

Для этой ошибки в SUMIF создан специальный баг#35636.
Пока он не будет исправлен можно использовать обходной путь:
Ждем = Всего-Аннулир-Пришло
или =SUM(E4:E409)-SUMIF(F4:F409;">";E4:E409)
или =SUMPRODUCT(E4:E409;F4:F409="")
или {=SUM(E4:E409*(F4:F409=""))}
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Umbrella

Спасибо, добрый человек!  :D  Почему-то первая строка суммирует не то, третья так и отображается, как текст в фигурных скобках, зато sumproduct - работает! Один файлик боле-мене "починил", буду другие пробовать.

Ждать починки для двухлетнего бага - уж слишком.  :o

А конструкцию ДВССЫЛ("'"&$A$1&"'!e$2") заменил, потыкавшись, на =INDIRECT("'"&$A$1&"'.e$2"). "Значение из E2 листа с именем, находящимся в A1". При автоматическом преобразовании Lcalc тоже не сумел заменить корректно. Может быть из-за "навороченности" исходной формулы? В оригинале она
=ЕСЛИ(ABS(ДВССЫЛ("'"&$A$1&"'!e$2")-C42)<0,9;"0";ДВССЫЛ("'"&$A$1&"'!e$2")-C42)-100000*(МЕСЯЦ(ТДАТА())-1)
Успехов, Alexey.

JohnSUN

#3
Фигурные скобки - это признак "формулы массива". Этот пример есть в справке по функции SUM - просто ввод формулы нужно заканчивать не обычным нажатием Enter, а стазу тремя клавишами Ctrl+Shift+Enter.
А то что первая формула взглюкивает - тоже понятно: она пытается считать "сумму всех за вычетом тех, у которых дата не указана". А у тебя, похоже, неуказанная дата это 0... Ну, там где нулевое января нарисовано...

Цитата: Umbrella от  7 апреля 2013, 19:30
=ЕСЛИ(ABS(ДВССЫЛ("'"&$A$1&"'!e$2")-C42)<0,9;"0";ДВССЫЛ("'"&$A$1&"'!e$2")-C42)-100000*(МЕСЯЦ(ТДАТА())-1)
Ой-ой-ой... Мне жалко Калк! Я сам, пока это прочитал, чуть косоглазие не заработал  ;D
Для начала - почему ты в качестве результата возвращаешь ТЕКСТОВЫЙ НОЛЬ, а не число 0? Зачем там эти кавычки?
В твоем примере нет образцов значений из колонок A-C, трудно понять что означают некоторые из вычислений... И уж совсем сбил с толку финальный аккорд - получить номер прошлого месяца и вычесть его много-много раз из какого-то значения?!! "Ик! Переведи?.." (с) "Москва слезам не верит"
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Umbrella

В колонке дат два типа значений: пусто и дата (включая "0" для аннулированных). И этот ноль так по разному интерпретируют и отображают Lcalc и MSexcel - отображение второго мне больше нравится: 00.01.1900 не существует, в отличии от вполне реальной 30.12.1899. Чогось можно сделать, чтобы глазом было это видно в Lcalc?

Смысл "write only" формулы - проверка, что не потерялись счета или не съехали формулы с "a15 - b15" на "а15 - b16". Т.к. файл редактируют два человека в "совместном доступе" и у одного мышка может дрогнуть.  :roll:

Возврат "цифронуля" не влияет на отображаемость на экране, ну и вообще эксель всегда явно их преобразует, нет привычки следить.

Т.к. суммы счетов не типа "деньги", а типа "float", то возникают ошибки округления, отсюда if(S<0.9;0;S); - ну можно было потыкать, поиграться и найти "заветные 0,294363", но 0.9 вполне себе "округляет" и не красит в красный цвет, пока все сходится. А как покраснело, видим не черный 0, а красную цифирь и по ней можно ctrl-f в &A2, чтобы поправить A15 - B16.

Каждое первое число месяца оттуда 100.000 исчезает, но соотв. счет НЕ возникает. Ну и понятно, что надо вычесть в 02 - 100т, в 03 - 200т, etc. При смене года (который в A1 и это имя листа) эта штучка руками меняется на 1.200.000. Эээ... C42 - это сумма, полученная "тут у нас", если она [округленно] совпадает с &A1!E2 "той оттуда", посчитанной другим методом и в другой таблице, то высок шанс, что никто никуда не съехал на разных листах и вместо точки запятую не ввели.  ;D
Успехов, Alexey.

JohnSUN

Основное, что я уловил из твоих объяснений - учетная система шибко навороченная, но ты прекрасно ориентируешься в том, что и как она делает... Ну и ладненько!
Только одно могу посоветовать сразу:
Цитата: Umbrella от  8 апреля 2013, 09:31
Каждое первое число месяца оттуда 100.000 исчезает, но соотв. счет НЕ возникает. Ну и понятно, что надо вычесть в 02 - 100т, в 03 - 200т, etc. При смене года (который в A1 и это имя листа) эта штучка руками меняется на 1.200.000.
Чтобы не париться с этими самыми "руками меняется", замени хвостик формулы на
-100000*MONTH(EOMONTH(A1;-1))
EOMONTH() будет всегда возвращать последний день прошлого месяца. То есть в январе будем получать 31-ое декабря прошлого года. А дальше так же, как и было - берем номер месяца (теперь всегда правильный), множим на 100К и т.д.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Umbrella

Абсолютно не навороченная.  :roll: Просто есть две автопроверки от "съезжания формул" и от "новый клиент не внесен".  На листе-текущем-годе "игого" считается по одной табличке, на листе-сумматоре (с диаграммой) по другой и результаты сравниваются. И там и там одинаково "съехать" не может по определению. Ну и еще на листе-годе сравниваются "всего=аннулировано+ждем+пришло ?" таким же примерно if, но без двойной ссылки. "Красная тряпка" видна? Роем копытом землю!  ;D

А что будет с формулой в феврале 2014? Она вернет 12 или 1?  ;D  Должна 12 для всех прошлых лет. Все равно лист "2014" будет создан (скопирован 2013 и где-надо-очищен) в январе 2014, совершенно не в лом раз в год поменять формулу на "1200000". И ёкселю-калку проще.

Ага, Оккам.  :beer:
Успехов, Alexey.