eeigor
|
багрепорт пишите А в Excel не всё однообразно (значит, безобразно)... 3) функция СЧЁТЕСЛИ() – <работает> по принципу "точно соответствует". Используется в паре с функцией ЕСЛИ(). Сам себя цитирую  Видимо, разработчик обеспечил соответствие поведения функции COUNTIF (другие не проверялись) поведению той же формулы в Excel. Всё так, с той лишь разницей, что в Excel нет вышеупомянутого флажка и в Справке написано иначе (с учётом флажка). Написать багрепорт будет непросто: задействованы Параметры, Справка, Руководство по Calc 6.2, Excel... и всё надо давать по-английски не в вольном переводе, а как в оригинале, а у меня русская версия Calc и Справки, и т.д., соответственно. Потом, вероятно, проверке надо подвергнуть весь перечень функций: database functions, and VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS, and SEARCH. UPD: Проверка функции базы данных DCOUNT выявила ту же проблему: работает, как COUNTIF, но ведь DCOUNT - функция базы данных, требует диапазона условий на листе, и в отличие от стандартного и расширенного фильтров, которые тоже работают с диапазоном условий на листе, НАПРОЧЬ ИГНОРИРУЕТ ВЫШЕУПОМЯНУТЫЙ ФЛАЖОК (пример прилагается; точнее, не работает с "simple comparisons", и надо добавить хоть пару скобок, о чём писал выше в ответе #25). Расширенный фильтр в примере потребует от вас заполнить все поля заново, чтобы обновить фильтр. DCOUNT обновляется автоматически. Данные рассогласованы. Этакую "непоследовательность" и ошибки данных следует отнести к грубым ошибкам. Помог бы кто-нибудь с багрепортом... ибо в Calc'е "отвалился целый кусок"  Поставил флажок обратно. Так надежнее Выходит, что так надёжнее... UPD2: Файл примера обновлён.
|
|
« Последнее редактирование: 14 Январь 2021, 10:46 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
kompilainenn
|
>а у меня русская версия Calc и Справки,
ну так поставьте английские версии. А багу сначала нужно правильно сформулировать по-русски. Я, например, не понимаю, в чем проблема. В справке? В работе функций? В работе функций в условном форматировании?
|
|
|
Записан
|
|
|
|
eeigor
|
Я, например, не понимаю, в чем проблема. В прилагаемом примере данные рассогласованы: расширенный фильтр вернул результат, а функция базы данных DCOUNT вернула 0. И то, и другое обрабатывают один и тот же диапазон условий. Но DCOUNT не работает с "simple comparisons" и требует каких-л. "опознавательных признаков" регулярного выражения, например пары скобок. UPD: А согласно Справки должна самостоятельно обрамлять условие символами ".*" слева и справа от него. Именно так написано. И именно в этом смысл флажка. И, наконец, именно так работают фильтры. UPD2: Проблема в опции, которую @Bigor назвал ненадёжной, а я попытался выяснить, в чём причина. Параметры – LibreOffice Calc – Вычисления Общие вычисления Условия поиска = и <> должны распространяться на всю ячейку UPD3: Это, по сути, уже оффтоп. Мы решаем проблему, с которой столкнулись в ходе решения задачи автора темы, а обсуждение которой уже "размазано" по ветке: Тогда должно работать и без ".*", но у меня что-то не вышло. А почему? =IF(AND(COUNTIF($A4;"abc");COUNTIF($A4;"123"));1;0)
|
|
« Последнее редактирование: 14 Январь 2021, 12:17 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
eeigor
|
Уважаемые форумчане, я поясню суть проблемы на примере фрагмента своих данных (скриншот прилагается). Желтым выделен диапазон условий с именем "Условия". Ниже строка итогов. Ещё ниже следует диапазон базы данных с именем "БД". В строке итогов используется функция SUBTOTAL. Пример: =SUBTOTAL(103;БД_ФИО) 'диапазон БД_ФИО д.б. создан, и это неудобно, ведь это поле диапазона базы данных (!) Удобнее так: =DCOUNTA(БД;"ФИО";Условия) Или вот так, если работаем по всем столбцам: =DCOUNT(БД;0;Условия) Очень наглядно и удобно. Как в Excel. Но использование функций базы данных приводит к вышеописанным ошибкам при снятом вышеупомянутом флажке (на скриншоте в поле 0 вместо 81). А функция SUBTOTAL не понимает структурных ссылок базы данных. Точнее, понимает, но заменяет их абсолютными ссылками после повторного открытия файла. Я имею в виду следующее: =SUBTOTAL(103;БД[ФИО]) 'структурная ссылка вместо ссылки на диапазон БД_ФИО, который нужно создавать После открытия файла ссылка будет заменена: =SUBTOTAL(103;$Данные.$F$10:$F$1982) ВЫВОД: совместная работа фильтра и функций базы данных не согласована, необходимо установить злосчастный флажок, а условия отбора дополнять своими ручками соответствующими символами регулярных выражений, то есть распространять на всю строку. Или создавать диапазоны столбцов вместо работы с полями диапазона базы данных. Ну, это маразм...
|
|
« Последнее редактирование: 14 Январь 2021, 14:13 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
eeigor
|
НА ЗАМЕТКУДа, это важные, и скрытые от пользователя, параметры. А как с этим бороться, сказано здесь (почитайте раздел "There are two ways to combat this:"). Крайне пользительно: COUNTIF(A3;".*") returns 1 if regular expressions are turned on. COUNTIF(A3;"<>e") returns 1 if whole cell matching is turned on. Однако, разбирая этот материал, вы столкнётесь всё с той же описанной выше проблемой. У вас не будет работать выражение №2, пока вы не заключите его, к примеру, в круглые скобки: =COUNTIF(A3;"<> (e )") И судя по всему, этого раньше не было...
|
|
« Последнее редактирование: 14 Январь 2021, 15:22 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
sokol92
|
Для справки. В Excel использование "D-функций" не рекомендуется разработчиком, функции SUMIFS, COUNTIFS значительно удобнее.
|
|
|
Записан
|
Владимир.
|
|
|
eeigor
|
sokol92, спасибо. Но в моём частном случае D-функции позволяют работать с именами полей. Я только что закончил "сражение" с расширенным фильтром в Calc, и полностью автоматизировал процесс. И хотя без заплатки не обошлось, но в целом получилось удобно. Поэтому для меня наличие диапазона условий на листе – норма: фильтруется быстро, и критерии на глазах. В этом случае удобны D-функции, так как они работают с именами полей диапазона базы данных, а новые функции – нет (а в Excel-то работают прекрасно со смарт-таблицами). По скорости они одинаковы и существенно опережают формулы массива.
Вероятно, расширенный фильтр, диапазоны БД и функции БД – не самый распространённый способ обработки данных. Приведу ещё один аргумент: в Calc сравнительно бедные сводные таблицы. Но дело даже не в этом, а в том, что СТ не позволяют объединять критерии оператором "ИЛИ", для этого создают вспомогательные столбцы в исходных данных. Расширенный фильтр (а в Calc ещё и Стандартный фильтр, но он не нагляден) прекрасно с этим справляется (И+ИЛИ). Впрочем, и здесь приходится иногда использовать вспомогательные столбцы, чтобы хранить устоявшиеся варианты отбора данных. Схема та же: =IF(OR(AND(COUNTIF(...);...);...);1;0)
UPD: Всё, о чём я писал, имеет значение для тех, кто что-то разрабатывает для других. В общем, для комплексных решений. Я, к тому же, восстанавливаю утраченную функциональность после ухода с Excel.
|
|
« Последнее редактирование: 14 Январь 2021, 18:18 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
|
eeigor
|
Респект. kompilainenn, я не предполагал, что можно файл примера прилагать на русском. Значит, можно? Я смотрю, что Mike Kaganski уже добавил свой комментарий. Единственное, осталось за кадром текущее решение проблемы. Если решение в виде пары скобок или других "опознавательных признаков" может что-то разъяснить. Впрочем, я об этом постарался сообщить...
|
|
« Последнее редактирование: 14 Январь 2021, 23:00 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
kompilainenn
|
не предполагал, что можно файл примера прилагать на русском. Значит, можно? Какая разница, если мы смотрим на число?
|
|
|
Записан
|
|
|
|
economist
|
@eeigor - поддерживаю! Диапазоны БД в Calc - действительно очень быстрый и мощный инструмент (такого нет даже в Excel), потому что: - Они "прячут" всю БД-сущность от пользователя. Он понятия не имеет откуда взялись данные, кто за него ввел логины/пароли тем самым 1С/Экселям/etc, почему данные "не убиваются" правкой и сами восстанавливаются при открытии файла или по кнопке. Большинство юзеров воспринимают это как настоящее офисное чудо. - Можно использовать данные из разных БД (sqlite, DBF, TXT итд) на одном листе (или даже заменяя поверх), обойтись без муторного кодинга Форм Base и уж тем более муторных Диалогов BASIC (где необходима обработка кучи возможных событий и тупняков юзера вроде нажатия Esc и потери фокуса). - Calc становится самым доступным конструктором одно-оконных интерфейсов бизнес-приложений, а всю логику и скорость "большого ПО" - обеспечивает "невидимый" SQLite или PostrgreSQL (и сервер с NVMe RAID массивом, на котором всё быстро это крутится). Представляете сколько работы можно спихнуть на юзеров? Они ведь будут рады, что сами себе нарисовали "форму", и формулами, усл. форматом - сделали то, чем будут гордиться и с удовольствием использовать. - Макросом можно легко "подменить" дескртиптор DatabaseRange, а там можно сменить не только "SELECT...", но и даже движок БД на принципиально другой. И, самое главное, быстрее механизма doImport для получения данных из огромных баз, похоже, в OpenOffice|LibreOffice - нет: oDBR = thisComponent.DataBaseRanges.getByName("Импорт1") oDesc() = oDBR.getImportDescriptor() oDesc(0) = "ДебиторыODB" ' а еще есть ГороскопCVS.ODB :-) oDesc(2) = "SELECT..." oDBR.getReferredCells.doImport(oDesc())
- У DatabaseRange есть отдельный Автофильтр, которым макросом можно управлять независимо от прочих (и куча команд Диспетчера). Кстати, его критерии можно хранить в ячейках выше, реализуя классический 1С/SAP-подобный интерфейс: "шапка" с кнопками (и итогами!) и "табличная часть" ниже. Ничего более эргономичного для "офисных/бух" данных пока не изобрели.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
eeigor
|
@economist, мне было интересно почитать.
P.S. Вообще, монологи от @economist традиционно вдохновляют и направляют…
|
|
« Последнее редактирование: 15 Январь 2021, 11:26 от eeigor »
|
Записан
|
Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
|
|
|
Mric
Участник

Offline
Сообщений: 38
|
Чтобы не создавать новую тему, тут еще одна загвоздка возникла. Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все?
|
|
|
Записан
|
|
|
|
economist
|
1) Повторите формулу из условного форматирования в пустом столбце 2) включите Автофильтр, отберите нужные строки 3) выделите отобранное, удалите
В Calc нет Фильтра по цвету (заливки и шрифта), какой есть в Excel, пожелания высказывались, когда-нить допилят и в LO.
|
|
|
Записан
|
Руб. за сто, что Питоньяк Любит водку и коньяк! Потому что мне, без оных, - Не понять его никак...
|
|
|
kompilainenn
|
Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все? Так может следовало просто удалять дубликаты, а не кружиться с условным форматированием?
|
|
|
Записан
|
|
|
|
|