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

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

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

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

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



« Ответ #15: 12 Январь 2021, 14:18 »

Но как мне этот селектед и автофильтр у себя сделать?
Добавить столбец, ввести в первую ячейку ту же формулу, что введена в окно УФ (добавив знак равно вначале), распространить эту формулу на все ячейки вниз по столбцу (протянуть мышкой вниз до конца столбца или: навести курсор на правый нижний угол ячейки и щёлкнуть по крестику, весь столбец будет заполнен и выделен, убедиться, что нет ошибок). Включить автофильтр (выделите весь столбец "Selected" с заголовком и выберите команду меню "Данные/Быстрый фильтр").

И вообще, в вашем примере УФ затратно, лучше использовать только автофильтр.
« Последнее редактирование: 12 Январь 2021, 14:27 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Bigor
Мастер
*****
Offline Offline

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


« Ответ #16: 12 Январь 2021, 14:26 »

гораздо эффективнее (для новичков)
особой разницы нет, как вариант
Код:
=IF(AND(ISNUMBER(FIND($C$1;A5));ISNUMBER(FIND($C$2;A5)));1;0)
регистрозависимая, если find() поменять на search() станет регистронезависимой
« Последнее редактирование: 12 Январь 2021, 14:29 от Bigor » Записан

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

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



« Ответ #17: 12 Январь 2021, 14:39 »

@Bigor, согласен. Я ещё не сравнивал "особенности" формул поиска в LO Calc. Просто предложил устоявшийся у меня вариант, ещё с Excel. А в Excel не всё однообразно (значит, безобразно). Далее всё с подстановочными символами:
1) расширенный фильтр работает по принципу "начинается с";
2) функция ПОИСК() – по принципу "содержит". Ищешь "специалиста", а отбираются дополнительно "ведущие", "главные" и пр. Используется в паре с функцией ЕЧИСЛО();
3) функция СЧЁТЕСЛИ() – по принципу "точно соответствует". Используется в паре с функцией ЕСЛИ().

Вот я и использовал вариант №3 с СЧЁТЕСЛИ(), а вы предложили вариант №2 с ЕЧИСЛО(). Прим.: я копирую фрагменты, поэтому не перевожу.

А вот почему у меня не сработал такой вариант (ниже) - это вопрос?
Параметры – LibreOffice Calc – Вычисления
Общие вычисления
 Условия поиска = и <> должны распространяться на всю ячейку   =   FALSE

Тогда должно работать и без ".*", но у меня что-то не вышло. А почему?
=IF(AND(COUNTIF($A4;"abc");COUNTIF($A4;"123"));1;0)

UPD:
Я активно использую расширенный фильтр (AdvancedFilter).
И из-за того, что расширенный фильтр не работает с подстановочными символами, а только с регулярными выражениями, то я и не использую больше подстановочные символы в формулах. Жаль, конечно, что AdvancedFilter с ними не работает. Но это не предусмотрено спецификацией.
« Последнее редактирование: 12 Январь 2021, 14:57 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Mric
Участник
**
Offline Offline

Сообщений: 17


« Ответ #18: 12 Январь 2021, 14:53 »

Но как мне этот селектед и автофильтр у себя сделать?
Добавить столбец, ввести в первую ячейку ту же формулу, что введена в окно УФ (добавив знак равно вначале), распространить эту формулу на все ячейки вниз по столбцу (протянуть мышкой вниз до конца столбца или: навести курсор на правый нижний угол ячейки и щёлкнуть по крестику, весь столбец будет заполнен и выделен, убедиться, что нет ошибок). Включить автофильтр (выделите весь столбец "Selected" с заголовком и выберите команду меню "Данные/Быстрый фильтр").

И вообще, в вашем примере УФ затратно, лучше использовать только автофильтр.

Не очень понял как тянуть, вот оно выдало для первой ячейки ноль, что верно, но как их ко всем ячейкам применить?


* sample3.png (54.49 Кб, 1920x1080 - просмотрено 7 раз.)
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #19: 12 Январь 2021, 15:01 »

Не очень понял как тянуть
Да просто скопируйте формулу из первой ячейки, выделите требуемый диапазон и вставьте скопированную формулу из буфера. Она относительная (если вы внимательно всё читали) и будет вставлена в каждую ячейку со ссылками на URL'ы в той же (важно!) строке, что и ячейка с формулой. Протянуть за крестик - это способ 2, а щёлкнуть по крестику - это способ 3 (в последнем случае диапазон должен быть смежным). Почитайте что-нибудь...
"Поместите курсор на маленький квадрат в правом нижнем углу выделенной ячейки. Курсор изменит форму на крестик".

@Mric, у вас действительно (на скриншоте) в качестве разделителя параметров в формулах используется символ запятой, а не точки с запятой?
« Последнее редактирование: 12 Январь 2021, 15:18 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Mric
Участник
**
Offline Offline

Сообщений: 17


« Ответ #20: 12 Январь 2021, 15:37 »

Не очень понял как тянуть
Да просто скопируйте формулу из первой ячейки, выделите требуемый диапазон и вставьте скопированную формулу из буфера. Она относительная (если вы внимательно всё читали) и будет вставлена в каждую ячейку со ссылками на URL'ы в той же (важно!) строке, что и ячейка с формулой. Протянуть за крестик - это способ 2, а щёлкнуть по крестику - это способ 3 (в последнем случае диапазон должен быть смежным). Почитайте что-нибудь...
"Поместите курсор на маленький квадрат в правом нижнем углу выделенной ячейки. Курсор изменит форму на крестик".

@Mric, у вас действительно (на скриншоте) в качестве разделителя параметров в формулах используется символ запятой, а не точки с запятой?

Большое спасибо, все работает! Скопировал все и отлично заработало) Да, действительно УФ было лишним.
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #21: 12 Январь 2021, 15:44 »

Замечательно!
А я, в свою очередь, попрошу участников ответить на мой вопрос в посте #17. Что-то там не так...
Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Bigor
Мастер
*****
Offline Offline

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


« Ответ #22: 12 Январь 2021, 15:49 »

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

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

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



« Ответ #23: 12 Январь 2021, 15:55 »

@Bigor, сброшенный флажок, собственно, частный случай, а установленный - более общий. Надо только определиться: если есть глюк, то всегда устанавливать флажок и дополнять условия поиска символами ".*".
При этом такие "полные" условия c символами ".*" будут прекрасно работать и при сброшенном флажке, ибо эти условия захватывают всю строку. Не знаю только, какие из них "жрут" больше (greedy).
Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Bigor
Мастер
*****
Offline Offline

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


« Ответ #24: 13 Январь 2021, 11:15 »

Попробовал дома, сброс флажка и перезагрузка LO к никаким изменениям в расчетах не привели. Пробовал на countif() и vloockup(). Поставил флажок обратно. Так надежнее Улыбка
Записан

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

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



« Ответ #25: 13 Январь 2021, 19:16 »

Вот тут справка по функции COUNTIF().
Читаю:
Если флажок Условия поиска = и <> должен распространяться на всю ячейку установлен, то условие “red” будет соответствовать только red; если не установлен оно будет соответствовать red, Fred, red herring.

Пробую... нет. Требуется точное соответствие, или надо всегда обрамлять строку поиска символами ".*" вне зависимости от установки вышеупомянутого флажка. Причём так работает и для регулярных выражений, и для подстановочных символов (обрамлять "*"). В смысле, не работает.
А как у других?

UPD:
Зато на работу функции REGEX() вышеупомянутый флажок никак не повлиял: ищет в любом случае (??). Зато есть параметр "g".

Но на работу стандартного и расширенного фильтров этот флажок влияет, как заявлено. Путаница, конечно.

UPD2:
Однако в справке сказано немного по другому (кнопка "Справка" в окне Параметры - Вычисления):
Когда установлен флажок Условия поиска = и <> должны распространяться на всю ячейку, поведение LibreOffice Calc полностью совпадает с поведением MS Excel при поиске ячеек в функциях базы данных.
Если флажок Условия поиска = и <> должны применяться к ячейкам целиком не установлен, шаблон поиска "win" работает подобно ".*win.*". Шаблон поиска может находиться в любом месте ячейки при поиске с помощью функций базы данных Calc.

Но это ведь не для COUNTIF()? Значит, вероятно, в описании этой функции ошибка. Флажок работает для фильтров и функций (формул) базы данных. А функции базы данных, как и расширенный фильтр, требуют ссылки на диапазон условий на листе. Могу ошибаться.

UPD3:
А вот разъяснения из Руководства по Calc 6.2 (которое переводит для нас kompilainenn):

Enable wildcards in formulas
Enable wildcards in formulas specifies that wildcards are enabled when searching and also for character string comparisons. This relates to the database functions, and to VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS, and SEARCH. Select this option for spreadsheets that need to be interoperable with Microsoft Excel.

Enable regular expressions in formulas
Enable regular expressions in formulas specifies that regular expressions instead of simple wildcards are enabled when searching and also for character string comparisons. This relates to the database functions, and to VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS and SEARCH. Do not enable regular expressions in formulas for spreadsheets that need to be interoperable with Microsoft Excel.

Информация НЕпротиворечивая. По функции COUNTIF, в частности. Но ожидаемого результата нет...

UPD4:
А вот и косяк:
Флажок Условия поиска = и <> должен распространяться на всю ячейку сброшен.
A5: Fred   <-- ищем в ячейке:
=COUNTIF($A5;"red")  'и не находим
=COUNTIF($A5;"r.d")  'и находим

А так не должно быть. "red" - это такое же выражение, как и "r.d". Но Calc не распознаёт "red" как регулярное выражение. А должен был сам пристегнуть символы ".*" с обоих сторон, как сказано в справке.
А это значит, что лучше обрамлять условие поиска символами ".*", что в решении, предложенном автору этой темы и было сделано! Поправьте меня, если я не прав...
Но расширенный фильтр с диапазоном условий РАБОТАЕТ ПРАВИЛЬНО.

UPD5:
Я немного неправ. Хотя и неожиданно. Но в руководстве по Calc 6.2 сказано (page 244):

Regular expressions will not work in simple comparisons. For example: A1="r.d" will always return FALSE if A1 contains red, even if regular expressions are enabled. It will only return TRUE if A1 contains r.d (r then a dot then d). If you wish to test using regular expressions, try the COUNTIF function: COUNTIF(A1,"r.d") will return 1 or 0, interpreted as TRUE or FALSE in formulas like =IF(COUNTIF(A1,"r.d"),"hooray","boo").

И надо, как предлагают, всегда тестировать регулярные выражения всё той же функцией COUNTIF.
Надеюсь, у всех теперь прибавилось ясности, и тему можно закрыть. Но всё-таки это косяк, и ноги растут из этих "simple comparisons" (расширенный фильтр работает, как упоминал уже, абсолютно правильно)...

Прошу прощения для столь длинный монолог. Ещё момент:
=COUNTIF($A5;"(red)")  'и находим
=COUNTIF(A5;"()red")  'тоже находим
А почему?
Активация параметра Включить регулярные выражения в формулах означает, что все вышеперечисленные функции будут требовать любые специальные символы регулярных выражений (например, круглые скобки)...

Хотя смысл фразы выше немного другой (page 244):
Activating the Enable regular expressions in formulas option means all the above functions will require any regular expression special characters (such as parentheses) used in strings within formulas, to be preceded by a backslash, despite not being part of a regular expression. These backslashes will need to be removed if the setting is later deactivated.
« Последнее редактирование: 13 Январь 2021, 21:46 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #26: 13 Январь 2021, 21:29 »

...to be preceded by a backslash, despite not being part of a regular expression. These backslashes will need to be removed if the setting is later deactivated.
И как всю эту хрень переводит @kompilainenn? Вот вопрос...
« Последнее редактирование: 13 Январь 2021, 21:34 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
kompilainenn
Мастер
*****
Online Online

Сообщений: 3 250



« Ответ #27: 13 Январь 2021, 22:01 »

Никак, это требует копания и проверок
Записан

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

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



« Ответ #28: 13 Январь 2021, 23:22 »

Ну, будем иметь в виду, что Calc "хочет знать", надо ли нам обеспечить точное сравнение или найти подстроку в строке даже при явно заданной опции поиска подстроки в строке.
Excel, кстати, в расширенном фильтре, если надо обеспечить точное сравнение, требует такого синтаксиса: ="=условие". В Calc эта задача решается установкой флажка.
Однако, круглые скобки создают группу. Можно и не создавать (для примера выше):
=COUNTIF($A5;"(?:red)")  'находит подстроку "red"
Или так:
A5: Fredred  <-- Текст в ячейке
=COUNTIF($A5;"(red)\1")  'находит "redred", используя ссылку на созданную группу

В общем, скрытый смысл опции разъяснён. Однако, налицо непоследовательность поведения формул и фильтров.
« Последнее редактирование: 13 Январь 2021, 23:29 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
kompilainenn
Мастер
*****
Online Online

Сообщений: 3 250



« Ответ #29: 13 Январь 2021, 23:46 »

Однако, налицо непоследовательность поведения формул и фильтров.
багрепорт пишите
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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