Звездочки в формуле

Автор Fiona, 24 июля 2020, 11:14

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

mikekaganski

#15
Фигурные скобки, равно как и куча других конструкций, имеют специальное значение в регулярных выражениях. Если Вы используете регулярки, Вам необходимо это учитывать в формулах. Не надо, конечно, менять исходные данные (ну, скажем, в ячейке C21). Но вот формула должна быть изменена так, чтобы указать, что всё, что в ячейке C21, это не регулярка, а строковый параметр для поиска "как есть". И для этого Вы должны, опять же, использовать регулярные выражения ... и всё это я уже писал в ответе #3.

Итак, для того. чтобы указать, что "вот всё, что тут написано, это не регулярка, а текст, независимо от попадающихся значков", надо этот текст обрамить в \Q..\E. То есть Ваша формула превращается в

=SUMIF($C$34:$C$31011;"\Q"&C21&"\E";$H$34:$H$31011)

Единственная тут проблема - это если там в C21 вдруг появится \E.

Кстати, "закрывать" последовательность вовсе необязательно, т.е. \E не требуется в конце. Такая формула тоже работает не хуже:

=SUMIF($C$34:$C$31011;"\Q"&C21;$H$34:$H$31011)
С уважением,
Михаил Каганский

sokol92

#16
Я потерял нить Ариадны. :) У Вас есть реальный бланк MS Excel (догадываюсь, какой) с очень большим количеством формул. Вам нужно только в Параметрах (бланк при этом должен быть активным документом) установить использование знаков подстановок в формулах, далее формулы бланка должны заработать. Регулярные выражения - красивая вещь, но в формулах Excel их нет.
Владимир.

mikekaganski

Цитата: sokol92 от  7 августа 2020, 19:10Вам нужно только в Параметрах установить использование знаков подстановок в формулах

... и вернуться к проблеме непереваривания тильды ;)
С уважением,
Михаил Каганский

sokol92

#18
 Предлагаю вернуться к тильде. Автор темы приводит формулу (в документе Excel или LO), которая в Excel считается не так, как в LO (с включенной обработкой знаков подстановок). Далее возможны варианты. :)
Владимир.

mikekaganski

Ну, это уж автору виднее. Без хорошего объяснения проблемы в целом, когда автор задаёт вопросы по типу "я тут вожусь с чем-то глобальным, а с чем - не скажу, и вот тут упёрлась в частную проблемку, которую хочу решить вот так; помогите с этим маааленьким вопросом" - оно всегда в конце концов выходит, что изначально решалась не та проблемка, и если бы отвечающие знали контекст, они бы подсказали лучше...
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от  7 августа 2020, 19:36если бы отвечающие знали контекст
Думаю, я знаком с обсуждаемым контекстом (и бланком) много лет... Так что 1/2 (или 1/100, это как считать) отвечающих знает. :)
Владимир.

sokol92

#21
Проблема "тильды" в нашем случае заключается в следующем.
В функциях Excel нет единого кодекса для обработки знаков подстановок.
Функции SUMIF, SUMIFS, COUNTIF, COUNTIFS, SEARCH, ... рассматривают тильду как маскировочный символ только если за ней следует "*" и "?". Если вслед за тильдой не следует "*" или "?", то тильда считается обычным символом. Например, если ячейка A1 содержит "1_~_2", а B1=1, то формула Excel

=SUMIF(A1;A1;B1)

даст 1.

LO считает тильду "полноценным" подстановочным символом и для получения того же результата, как в Excel, нужно в нашем случае писать так

=SUMIF(A1;SUBSTITUTE(A1;"~";"~~");B1)

В других функциях Excel (например, VLOOKUP, ...) при поиске текста, содержащего тильду, знак тильды в аргументе поиска (первый аргумент) надо задваивать.
Владимир.

economist

Fiona - я, кмк, иногда занимаюсь тем же самым, что и Вы - классификацией и суммированием проводок (десятка предприятий). И благодарен Богу за тот день, когда случайно набрел на библиотеку pandas для языка python, работающей в т.ч. под нашим LO, почти из коробки (не считая установки скриптом pip и среды пошагового выполнения/IDE/CMS jupyterlab). Всё это - свободное и портабельное/переносимое/неадминское ПО.

То, с какой скоростью работают векторизованные базы данных pandas в оперативной памяти RAM - не поддается никакому, даже матерному производственному эпитету! Мои 3,5 миллиона проводок бухучета на 50 полей, все за 20(!) лет работы крупного завода, с десятком миллиардов выручки в год, тысячей работников, несколькими переделами, десятком ОКВЭД-ов, экспортом, соцобъектами, профсоюзами итд - из сотни обычных "сырых" 1С-овских CSV-файлов общим размером 10 GB (вы подумайте!) - грузятся на любом офисном компьютере, в его RAM, за 5-7 секунд! И занимают там всего ~0.5 GB.

Они уже там проиндексированы, отсортированы, категоризованы, приведены к одному плану счетов (менялся трижды) и единой аналитике (3 разных 1С7/8). Аналитика сокращена и "причесана" силой Python, его обычными строковыми операциями вроде replace и срезами[]. Они быстрые, потому что это язык С.
Впрочем, по настоящему "атомно" Питон силен не сам по себе, а потому что его "поддерживают" 255k(!) свободных библиотек с pypi.org. 

Так вот, эти мои 3.5 млн. строк  * 50 полей - в RAM ведут себя просто как сверхсветовой космолет! Я могу ответить на любой вопрос по бухучету (кто, где, когда, кому, за что и сколько, за любой(!) период из 20 лет) - за минуту. Мне не нужно помнить номенклатуру товаров, план счетов, имена ОС, МОЛов итд (строки) - они автодополняется при наборе. Фокус в том что в Python есть глубочайшая, всеобъемлющая интроспекция для "всего" и автодополнение кода. Писать на Питоне неработающий код - просто не получается.

Заменить в этой базе сотни тысяч старых проводок номенклатуры "Сливочное масло, кг" на новые "Масло сливочное, кг" - займет около... 0,05 секунд. А с регуляркой 0,1 сек. И все это в одну строку кода. Такие скорости позволяют пресловутую "чистку" данных делать каждый раз, незаметно даже для самого себя. Даже просто так, на всякий случай.

А все поставки материалов выбираются из p так: p.query('д==10 and к in [60, 76]') - за 0,1 сек.

Практически все "выборки" - однострочники. Даже с группировками и фильтрами. Одним словом, попробуйте pandas. Супер-формулы в Excel/Calc - это важный, нужный шаг в эволюции. Мы его, скорее всего, уже прошли. Идти вперед!
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Fiona

Спасибо за поддержку! Очень интересные комменты :)
Все верно: есть задача правительства - импортозамещения ПО в госструктурах. И всем по барабану, что отечественные продукты  совершенно сырые. Нам удалось сойтись на том, что LO идет в пакете с AstraLinux, и его можно использовать как бесплатный. Предприятий в структуре море, отчетов с формулами и макросами - тоже.
Сейчас начали с одной формы сбора отчетности. Все бухи работают в excel. Предполагается, что после тестирования будем переходить на Calc. Переписанная форма замечательно работает и с excel, и с Calc. Но естественно, вылазят всякие непредвиденные косяки.
По поводу питона - тоже интересно, можно подумать. Сроки позволяют думать и выбирать.