Доброе утро! Прошу помощи, необходимо текст в столбце А разделить по разделителю "-" и расположить по строкам справа налево Файл пример прилагаю Данные в столбцах A,B не статичны, могут располагаться в ниже или выше
Доброе утро! Прошу помощи, необходимо текст в столбце А разделить по разделителю "-" и расположить по строкам справа налево Файл пример прилагаю Данные в столбцах A,B не статичны, могут располагаться в ниже или вышеXenus91
Ещё можно пойти таким путём. Сначала скопировать колонку А в колонку G, в которой затем выполнить команду "Текст по столбцам" с разделителем "-", в результате чего данные разбросаются по столбцам G:N.
Далее в ячейку D2 помещаем довольно простую формулу, которую затем протягиваем вниз на нужное количество строк:
Ещё можно пойти таким путём. Сначала скопировать колонку А в колонку G, в которой затем выполнить команду "Текст по столбцам" с разделителем "-", в результате чего данные разбросаются по столбцам G:N.
Далее в ячейку D2 помещаем довольно простую формулу, которую затем протягиваем вниз на нужное количество строк:
=IF(ROWS($A$2:$A2)<=SUMPRODUCT(LEN(A$2:A$18)-LEN(SUBSTITUTE(A$2:A$18;"-";)))+2;FILTERXML("< t >< s >"&SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";"< /s>< s >")&"< /s >< /t >";"//s[last()-"&(MOD(ROWS($D$2:D2)-1;LEN(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2))-LEN(SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";""))+1)+1)-1&"]");"")
Для столбца D одной формулой.
Код
=IF(ROWS($A$2:$A2)<=SUMPRODUCT(LEN(A$2:A$18)-LEN(SUBSTITUTE(A$2:A$18;"-";)))+2;FILTERXML("< t >< s >"&SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";"< /s>< s >")&"< /s >< /t >";"//s[last()-"&(MOD(ROWS($D$2:D2)-1;LEN(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2))-LEN(SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";""))+1)+1)-1&"]");"")
Gustav, большое спасибо, доберусь до компьютера попробую, на телефоне пока глянул, получается формула работает для фикс ячейки, а можно как-то разбить этот текст по разделителю, собрать в массив и вывести n элемент массива? Например текст для обработки будет скопирован вниз по столбцу и напротив будут идти номера элементов по убыванию как они сейчас есть и рядом по номеру элемент будет отображаться то что мне как раз и нужно
Gustav, большое спасибо, доберусь до компьютера попробую, на телефоне пока глянул, получается формула работает для фикс ячейки, а можно как-то разбить этот текст по разделителю, собрать в массив и вывести n элемент массива? Например текст для обработки будет скопирован вниз по столбцу и напротив будут идти номера элементов по убыванию как они сейчас есть и рядом по номеру элемент будет отображаться то что мне как раз и нужноXenus91
а можно как-то разбить этот текст по разделителю, собрать в массив и вывести n элемент массива?
Можно, если располагаете версией Excel, содержащей фукцию TEXTSPLIT. Вроде, она есть в подписочной версии Excel для Microsoft 365. Эта функция внутри формулы формирует виртуальный массив, фактически делая то же, что и команда "Текст по столбцам".
Я сужу только по опубликованным в Сети материалам, доступа к версии 365 я не имею. [offtop]Но у меня, как у многих, есть свободный доступ к Таблицам Google, в которых УЖЕ есть аналогичная функция SPLIT. Можете попробовать с ней, формула для той же ячейки D2 будет такая (протягиваемая вниз, как и в Excel): [vba]
а можно как-то разбить этот текст по разделителю, собрать в массив и вывести n элемент массива?
Можно, если располагаете версией Excel, содержащей фукцию TEXTSPLIT. Вроде, она есть в подписочной версии Excel для Microsoft 365. Эта функция внутри формулы формирует виртуальный массив, фактически делая то же, что и команда "Текст по столбцам".
Я сужу только по опубликованным в Сети материалам, доступа к версии 365 я не имею. [offtop]Но у меня, как у многих, есть свободный доступ к Таблицам Google, в которых УЖЕ есть аналогичная функция SPLIT. Можете попробовать с ней, формула для той же ячейки D2 будет такая (протягиваемая вниз, как и в Excel): [vba]
Xenus91, Обнаружил пару косяков, выкладываю обновленный вариант.
Код
=IF(ROWS($A$2:$A2)<=SUMPRODUCT(LEN(A$2:A$30)-LEN(SUBSTITUTE(A$2:A$30;"-";)))+COUNTA(A$2:A$30);FILTERXML("< t >< s >"&SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";"< /s >< s >")&"< /s >< /t >";"//s[last()-"&(MOD(ROW()-LOOKUP(2;1/($A$2:$A2<>"");ROW($A$2:$A2));LEN(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2))-LEN(SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";""))+1)+1)-1&"]");"")
Xenus91, Обнаружил пару косяков, выкладываю обновленный вариант.
Код
=IF(ROWS($A$2:$A2)<=SUMPRODUCT(LEN(A$2:A$30)-LEN(SUBSTITUTE(A$2:A$30;"-";)))+COUNTA(A$2:A$30);FILTERXML("< t >< s >"&SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";"< /s >< s >")&"< /s >< /t >";"//s[last()-"&(MOD(ROW()-LOOKUP(2;1/($A$2:$A2<>"");ROW($A$2:$A2));LEN(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2))-LEN(SUBSTITUTE(LOOKUP(2;1/(ROW($A$2:$A2)/(A$2:A2<>""));$A$2:$A2);"-";""))+1)+1)-1&"]");"")