Нужна помощь с формулой массива.

Автор Кот, 31 октября 2022, 17:06

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

Кот

Добрый день!

В Exsel имеется формула массива:
=ИНДЕКС(Наим_кружка_4;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);СТРОКА(T12:T12));СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);0))
работает хорошо от А до Я.

В LibreOffice эта же формула работает наоборот, сортирует от Я до А:
=ИНДЕКС(Наим_кружка_4;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(Наим_кружка_4;"<"&Наим_кружка_4);СТРОКА(T1:T1));СЧЁТЕСЛИ(Наим_кружка_4;"<"&Наим_кружка_4);0))

Знаки < > менял, ничего не получается.
Кто-нибудь подскажет, где ошибка?
Спасибо!

bigor

Цитата: Кот от 31 октября 2022, 17:06где ошибка?
если бы еще и файл был, в котором можно было проверить работу формулы.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

bigor

Цитата: Кот от  1 ноября 2022, 08:59Ссылки к файлам
,этого мало, что бы подключиться к вашему компьютеру :)
Цитата: Кот от  1 ноября 2022, 08:59Как вставить вложение на Вашем сайте, я не нашел.
это да, сам долго искал. Жмете кнопку Просмотр, появляется пункт вложения и другие параметры, щелкаете на нем и там уже кнопка добавить файлы

Снимок221101.PNG
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Кот

#3
Приложены файлы

mikekaganski

#4
=ИНДЕКС(Наим_кружка_4;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);СТРОКА(T1:T15)+СЧЁТЕСЛИ(Наим_кружка_4;"="));СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);0))
или даже

=ИНДЕКС(Наим_кружка_4;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);СТРОКА(СМЕЩ(T1;СЧЁТЕСЛИ(Наим_кружка_4;"=");0;ЧСТРОК(Наим_кружка_4);1)));СЧЁТЕСЛИ(Наим_кружка_4;">"&Наим_кружка_4);0))
См. tdf#151851.
С уважением,
Михаил Каганский

bigor

#5
Можно так
=IFERROR(INDEX(ФИО;MATCH(LARGE(COUNTIF(ФИО;">"&ФИО);ROW(C2)+MAX(COUNTIF(ФИО;">"&ФИО)));COUNTIF(ФИО;">"&ФИО);0));"")
=ЕСЛИОШИБКА(ИНДЕКС(ФИО;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(ФИО;">"&ФИО);СТРОКА(C2)+МАКС(СЧЁТЕСЛИ(ФИО;">"&ФИО)));СЧЁТЕСЛИ(ФИО;">"&ФИО);0));"") логически LO правильнее считает, пустая строка самое меньшее значение.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

sokol92

#6
Вопрос, как правильно сортировать пустые (нулевые) значения не имеет ответа.

О сортировке в SQL-базах см. здесь. В разных базах по-разному. В стандартах SQL есть специальная конструкция во фразе Order By ... NULLS FIRST/NULLS LAST (которую не все базы понимают).

В Excel с самых первых версий пустые ячейки при сортировке помещаются в конце диапазона. Порядок при сравнении значений для сортировки по возрастанию:

Число < Текст < Логическое значение < Ошибочное значение < Пустая ячейка

По убыванию:

Ошибочное значение > Логическое значение > Текст > Число > Пустая ячейка
Владимир.

mikekaganski

Цитата: sokol92 от  1 ноября 2022, 13:07В Excel с самых первых версий пустые ячейки при сортировке помещаются в конце диапазона

Но при этом здесь сортируются не пустые ячейки, а суммы результатов сравнения ячеек оператором ">", верно? И Excel точно так же считает, что '= CELL_WITH_CHARACTERS > EMPTY_CELL' даёт истину?
С уважением,
Михаил Каганский

sokol92

#8
Для Excel (ru-RU) пусть A1 пустая ячейка, A2: 1  A3: a A4: ИСТИНА A5: =1/0
Тогда
=A2<A1 : ЛОЖЬ
=A3<A1 : ЛОЖЬ
=A4<A1 : ЛОЖЬ
=A5<A1 : #ДЕЛ/0!

Для сортировки действуют специальные правила в отношении пустых ячеек (уточнил #7).

В Excel при необходимости отсортировать диапазон так, чтобы пустые ячейки были в начале диапазона, приходится использовать трюки типа: меняем пустые ячейки на -1E300, сортируем, меняем обратно.

Да, я согласен, что это не по данной теме.
Владимир.

sokol92

Возвращаясь к теме (расхождение между Excel и Calc).
Причина (на мой взгляд) - разница в поведении функции CountIf. Для моделирования ситуации из исходного сообщения создадим пример.

Пусть A1 - пустая ячейка, A2=1.
Запишем в B1 формулу
=COUNTIF(A1:A2; ">")

В ячейки C1:C2 заносим массив формул
=COUNTIF(A1:A2; ">" & A1:A2)

Я не нашел, что означает для функции CountIf второй параметр ">" ни для Excel, ни для Calc.

И в Excel, и в Calc значения формул равны 0.

Теперь заносим в A2 букву A (вместо 1). В Excel - все нули. В Calc B1=1, C1=1, C2=0.
Вывод: необходимо специфицировать поведение функции CountIf со вторым параметром ">" ("<").

Надеюсь, на этот раз не написал глупостей.  :)
Владимир.

mikekaganski

#10
Цитата: sokol92 от  1 ноября 2022, 16:41Я не нашел, что означает для функции CountIf второй параметр ">" ни для Excel, ни для Calc.

Для Calc это описано в определении Criterion (4.11.8), на которое дана ссылка в описании функции.
Хотя если Вы имеете ввиду "что обозначает Criterion, состоящий из одинокого знака больше / меньше", то явно не описано, в отличие от одинокого знака "равно" и "не равно".
С уважением,
Михаил Каганский

Кот

Ребята!
Всем большое спасибо за помощь!
Прикрепляю файл, рабочий вариант массива в LibreOffice.

=ЕСЛИОШИБКА(ИНДЕКС(ФИО;ПОИСКПОЗ(НАИБОЛЬШИЙ(СЧЁТЕСЛИ(ФИО;">"&ФИО);СТРОКА(C1:C1)+СЧЁТЕСЛИ(ФИО;"="));СЧЁТЕСЛИ(ФИО;">"&ФИО);0));"")