Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

7 Декабрь 2021, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Подсчет периода заданного числа.  (Прочитано 1414 раз)
0 Пользователей и 1 Гость смотрят эту тему.
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Стартовое сообщение: 17 Октябрь 2021, 14:54 »

Добрый вечер, уважаемые знатоки 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))

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

* Пример для периода.ods (7.27 Кб - загружено 10 раз.)
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 200


« Ответ #1: 17 Октябрь 2021, 22:52 »

Добрый

Как понял
Код:
=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);""))

* Пример для периода_1.ods (9.25 Кб - загружено 4 раз.)
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #2: 18 Октябрь 2021, 04:49 »

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


* период.png (26.1 Кб, 299x826 - просмотрено 15 раз.)
« Последнее редактирование: 18 Октябрь 2021, 04:54 от лена89 » Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 200


« Ответ #3: 18 Октябрь 2021, 07:05 »

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #4: 18 Октябрь 2021, 07:09 »

А у Вас какой офис? У меня в ЛО 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
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 200


« Ответ #5: 18 Октябрь 2021, 07:15 »

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #6: 18 Октябрь 2021, 07:24 »

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

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

Пол: Мужской
Сообщений: 1 200


« Ответ #7: 18 Октябрь 2021, 07:34 »

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #8: 18 Октябрь 2021, 08:41 »

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

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

Пол: Мужской
Сообщений: 1 200


« Ответ #9: 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);""))
массивная

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #10: 18 Октябрь 2021, 10:50 »

=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
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 200


« Ответ #11: 18 Октябрь 2021, 13:29 »

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #12: 18 Октябрь 2021, 15:03 »

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

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

Пол: Мужской
Сообщений: 1 200


« Ответ #13: 18 Октябрь 2021, 21:54 »

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

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

* Пример для периода_2.ods (9.76 Кб - загружено 7 раз.)
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
лена89
Форумчанин
***
Offline Offline

Сообщений: 120



« Ответ #14: 19 Октябрь 2021, 08: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 всё считает.
Это моя вина. Простите. Я привела кусочек массива, не конкретизируя, что длина массива меняется. Извините. Даже не думала, что это может повлиять на исход. А на конечном массиве в примере последняя строчка сейчас считается на моем ЛО. Спасибо большое!
« Последнее редактирование: 19 Октябрь 2021, 09:00 от лена89 » Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!