Подсчет периода заданного числа.

Автор лена89, 17 октября 2021, 14:54

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

лена89

Добрый вечер, уважаемые знатоки LibreOffice.

Обращалась к вам с подобным вопросом, но только лишь подобным, а сейчас встала задача , вроде похожая, но никак не соображу как это сделать. Ранее я обращалась с вопросом, как найти в столбце первое с начала и с конца заданное число. Мне предложили формулу массивную, со скобками {} . Она меня очень выручила. А сейчас встала задача подсчитать не только с начала и конца, а по всему массиву. Если наглядно, то вот пример.
Есть столбец Е. В нем чередуются числа от 0 до 7. В столбце F проставляется период числа 2. То есть, напротив числа 2 ставится число, обозначающее количество ячеек между двумя соседними двойками. В самом низу ставится число ячеек , которые идут после последней двойки. Не важно, что это число стоит напротив числа 7. В том случае, , если последним будет число 2, то напротив него, должен стоять завершенный период. А в данном случае, период незавершенный. Вот как-то так. В общем, нужно подсчитать промежуточные периоды числа 2.

Формула, которую мне подсказали в прошлый раз , я её скопировала со своего файла:   =MIN(IF(INDIRECT(EV$1):INDIRECT(EV$2)=$Z11;ROW(INDIRECT(EV$1):INDIRECT(EV$2));""))-ROW(INDIRECT(EV$1))

Подскажите, пожалуйста, формулу для данного примера. Буду очень признательна!

bigor

Добрый

Как понял
=IF(E4=$E$1;ROW()-SUM($G$1:$G3)-4-COUNT($G$1:G3);IF(E5="";ROW()-AGGREGATE(14;6;ROW($E$4:$E$29)/(E$4:E$29=$E$1);1);""))
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

#2
Спасибо большое. Всё промежуточное считает, но вот только последняя строчка - незавершенный период - выдает ошибку, решеточку)  В принципе, можно оставить и так, а незавершенный период считать вручную, но иногда важен именно незавершенный период.

bigor

А у Вас какой офис? У меня в ЛО 7.2 считает, за это отвечает агрегате, может не самое удачное решение, но вечером ничего лучшего не придумал. Расширьте ячейку,  посмотрите, что в ней написано.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

Цитата: Bigor от 18 октября 2021, 07:05
А у Вас какой офис? У меня в ЛО 7.2 считает, за это отвечает агрегате, может не самое удачное решение, но вечером ничего лучшего не придумал. Расширьте ячейку,  посмотрите, что в ней написано.


Добрый день) У меня офис вот такой : скопировала : Версия: 6.2.8.2
ID сборки: 1:6.2.8~rc2-0ubuntu0.16.04.1
Потоков ЦП: 2; ОС:Linux 4.15; Отрисовка ИП: по умолчанию; VCL: gtk2;
Локаль: ru-RU (ru_RU.UTF-8); Язык UI: ru-RU
Calc: threaded

Расширила ячейку :  # DIV/0!

bigor

Я сталкивался, что в старых версиях агрегате неверно отрабатывала, можно сделать массивной формулой, но это будет не раньше вечера
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

Цитата: Bigor от 18 октября 2021, 07:15
Я сталкивался, что в старых версиях агрегате неверно отрабатывала, можно сделать массивной формулой, но это будет не раньше вечера

А у Вас в вашем ЛО в моем примере  напротив последней семерки стоит единичка? Так может мне обновить ЛО? Но дело в том, чтоя его регулярно обновляю, но у меня ставится версия не выше 6. Обновляю через терминал всегда.

bigor

7.2.1.2, но в нем есть свои "косяки",  поэтому обновляться прямо сейчас на рабочей машине я советовать не буду.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

Цитата: Bigor от 18 октября 2021, 07:34
7.2.1.2, но в нем есть свои "косяки",  поэтому обновляться прямо сейчас на рабочей машине я советовать не буду.

Понятно. Ну, я подожду до вечера тогда. Потому что сама я точно не справлюсь, особенно с массивными формулами. Но почему-то у меня от массивных формул подвисает ЛО. Не знаю почему, давно заметила. Поэтому обычно стараюсь их избегать. Но если без них никак, то придется искать причину в подвисании. Думаю, разберусь.

bigor

Получилось раньше
=IF(E5=$E$1;ROW()-SUM($G$1:$G4)-4-COUNT($G$1:G4);IF(E6="";ROW()-LARGE(IF((E$4:E$29=$E$1);ROW($E$4:$E$29);"");1);""))
массивная

я не думаю, что по быстродействию массивная сильно отличается от простой с агрегате() или сумпризв() они так же перелопачивают те же массивы строк.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

Цитата: Bigor от 18 октября 2021, 09:55=IF(E5=$E$1;ROW()-SUM($G$1:$G4)-4-COUNT($G$1:G4);IF(E6="";ROW()-LARGE(IF((E$4:E$29=$E$1);ROW($E$4:$E$29);"");1);""))

К сожалению у меня не работает.
Почему-то я ставлю {} скобки и после того как нажимаю кнтр+энтер у меня получается билиберда и выдает ошибку 539.
={=IF(E5=$E$1;ROW()-SUM($G$1:$G4)-4-COUNT($G$1:G4);IF(E6="";ROW()-LARGE(IF((E$4:E$29=$E$1);ROW($E$4:$E$29);"");1);""))}
Слева от стрелки появляется ещё один знак равно. Короче, не знаю. Буду пробовать так и так. В принципе, я первую Вашу формулу приспособила. и чтобы увидеть незавершенный период , я просто вместо семерки последней ставлю вручную 2). И все работает. Главное, не забывать менять. И главное, как объяснить это другим людям, которые будут пользоваться ( вдруг) этой формулой. Сама-то я понимаю как. У нас, к сожалению, все любят рутину, и считают вручную. Меня это лично запаривает. Всё равно Вам огромное спасибо!) Вы очень помогли. Я теперь хоть завершенные  промежутки не высчитываю.

bigor

не надо скобки ставить, нужно скопировать формулу в строку формул и нажать Ctrl+Shift+enter скобки сами появятся
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

Цитата: Bigor от 18 октября 2021, 13:29
не надо скобки ставить, нужно скопировать формулу в строку формул и нажать Ctrl+Shift+enter скобки сами появятся

Я поняла уже. Просто редко их применяю, массивные. Но всё-равно в последней строчке выдает ошибку. #DIV/0!  Насколько я знаю, где-то идет деление на ноль. Ладно. Вы все-равно мне помогли. Огромное Вам спасибо!  Я все-равно уже сижу кайфую. Все считается. А незавершенный период можно и так подсчитать.

bigor

Смотрите в файле

На работе в LO 6.4.6.2 агрегате() тоже вываливается в ошибку деления на 0
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

лена89

#14
Цитата: Bigor от 18 октября 2021, 21:54
Смотрите в файле

На работе в LO 6.4.6.2 агрегате() тоже вываливается в ошибку деления на 0

Да, вот эта формула работает. Всё замечательно. Но только знаете, она работает на конечном массиве. Ну, как в примере, несколько строк, но на самом деле массив наращивается, и конечная строчка массива всегда меняется. И вот когда я попробовала в Вашу формулу внести корректировку (под свой файл) , у меня последняя строчка выдает снова ошибку. уже не деление на ноль, а  вот такая  #ССЫЛКА  У меня вот такая формула. =IF(BW6=$BY$260;ROW()-SUM($BY$1:$BY5)-6-COUNT($BY$1:BY5);IF(BW7="";ROW()-LARGE(IF((BW$6:INDIRECT(BW$263)=$BY$260);ROW($BW$6:INDIRECT($BW$263));"");1);""))   Все промежуточные периоды она считает. Но последнюю строчку нет. Я думаю, может здесь дело в функции INDIRECT ? Может здесь просто нельзя менять диапазон? Без INDIRECT всё считает.
Это моя вина. Простите. Я привела кусочек массива, не конкретизируя, что длина массива меняется. Извините. Даже не думала, что это может повлиять на исход. А на конечном массиве в примере последняя строчка сейчас считается на моем ЛО. Спасибо большое!