Объединение ячеек построчно

Автор neg-56, 24 августа 2021, 07:00

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

neg-56

Можно ли выделить диапазон ячеек и объединить построчно а не в одну ячейку?
например
1 2 3
4 5 6
7 8 9

должно получиться три ячейки:
123
456
789

eeigor

#1
В соседнем столбце объедините построчно значения всех трёх ячеек в одну (при помощи функций CONCAT или TEXTJOIN), выделите, скопируйте и вставьте результат как значения. После этого можно удалить исходные столбцы.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

neg-56

Формула работает но не в моей кривой таблице есть
A  B C  D E
[1 2 3
[5 3 5 [4 4 5 5 5 5 5 5 [5 3 5
[5 6 6
Мне нужно объединить ячейки которые начинаются на [ но в строке могут быть несколько ячеек которые будут начинаться на "["
Например как в строке 2..и получается три объедения получится

eeigor

#3
@neg-56, выражайтесь яснее. Информация от Вас поступает дозированно и не соответствует предыдущей.
В последнем сообщении неясно, что надо получить в итоге.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

kompilainenn

#4
ТС хочет такую функцию, как есть в МС Эксель

Которой в ЛО нету https://bugs.documentfoundation.org/show_bug.cgi?id=137853
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

#5
Попробую угадать.
Если нужно объединить все ячейки построчно, но при условии, что значение включаемой ячейки начинается с "[", при этом сам символ "[" надо пропустить, то формула будет такой:

O1: {=TEXTJOIN("";1;IF(LEFT(A1:N1)="[";MID(A1:N1;2;99)))}

Формула вводится как формула массива в каждую строку (ячейку) отдельно.

Пояснение. Формула массива решает задачу "избавления" от проверок на "если начинается с [" для каждой ячейки строки. Иначе было бы очень много вложенных IF (по кол-ву ячеек), зато формула была бы понятней (в действительности, это неудобно).

Ваш пример приложен.

Edit: 99 – это максимальное кол-во символов в ячейке (в общем, "взять" всё до конца).
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

neg-56

#6
Немного не так
Приложил файл
Все что начинает c "[ это начало
Если в строке будет 3 скобки [ соответствено я должен получить три значения из объеденных ячеек
Результаты в ячейках Q R S
символ "[" yt надо пропускать.Он начало

sokol92

Владимир.

bigor

#8
Цитата: neg-56 от 24 августа 2021, 11:36Немного не так
тогда первой формулой  или этой =TEXTJOIN("";1;A1:N1) объединяете все ячейки, вставляете как значения, затем получившийся столбец разбить "Текст по столбцам" разделитель [
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

eeigor

#9
Существенно то, что функция REGEX почему-то может заменять вхождение по номеру, но не может извлекать. И зачем объединили два параметра: Occurrence|Flags?

@Bigor, если "[" не сначала, то появляется лишний блок информации впереди.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#10
@neg-56, сколько максимально "[" может быть, известно?
Данные вводятся не вручную, по-видимому... Это нельзя сделать при выводе информации на лист?
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

neg-56


mikekaganski

Цитата: eeigor от 24 августа 2021, 13:11Существенно то, что функция REGEX почему-то может заменять вхождение по номеру, но не может извлекать. И зачем объединили два параметра: Occurrence|Flags?

Совершенно непонятно, что имеется ввиду. Occurrence работает и для extract, и для replace. Flags релевантно только для replace, и его единственный определённый флаг "g" означает "заменить везде", что очевидно исключает Occurence.
С уважением,
Михаил Каганский

bigor

Цитата: eeigor от 24 августа 2021, 13:11если "[" не сначала,
у ТС все начинается с [ , если условия опять поменяются тогда уже будем думать :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

eeigor

#14
Да, я ошибся:
=REGEX("axbxcxd";".x";;2) returns "bx", the second match of ".x".

Тогда можно порекомендовать и такой вариант;
1. Объединить всё вместе.
   O1: =TEXTJOIN("";1;A1:N1)
2. Извлечь блоки цифр по номеру блока формулой:
   P1: =REGEX($O1;"(?<=\[)\d+";;1)
   Q1: =REGEX($O1;"(?<=\[)\d+";;2)
   R1: =REGEX($O1;"(?<=\[)\d+";;3)
и так далее...

Ну, или вот так (формулой массива):
   Для P1:R1
{=REGEX($O1;"(?<=\[)\d+";;{1;2;3})}

Edit:
Формулу массива надо вставить в строку 1 и скопировать её, выделить весь диапазон оставшихся строк и вставить формулу сразу во все строки. Там, где блоков информации будет меньше, отобразится #N/A.
Ошибку можно скрыть:
{=IFERROR(REGEX($O1;"(?<=\[)\d+";;{1;2;3});"")}


Edit:
Добавлен рабочий пример на 9 блоков.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community