Excel – объединить все экземпляры текста перед разделителем в одну ячейку

У меня есть столбец строк в следующем формате:

Xxx, yyy, zzz, Need this|AAA, BBB, CCC, And this|Xxx, BBB, CCC, This too...

Число "|" разделители не указаны и различаются в каждой ячейке столбца. Для каждой строки мне нужно извлечь список текста между | разделитель и предшествующая ему запятая.

Я нашел, как получить каждый из них по отдельности:

=TEXTAFTER(TEXTBEFORE(cellvalue,"|",", ",-1))

Однако я не уверен, как перебирать разделители X в каждой ячейке, чтобы получить список текста перед каждым разделителем. Я бы хотел, чтобы эти значения находились в списке по одной ячейке в каждой строке, разделенной разделителем.

Бонус, если вы можете добавить метод, чтобы сделать список только уникальными значениями!

Понимаю, что с другой программой это было бы проще, но я могу работать только с Excel :)

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
102
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы могли бы попробовать что-то вроде этого:


=TEXTJOIN(CHAR(10),1,TEXTAFTER(TEXTSPLIT(A1,,"|"),", ",-1))

Чтобы были только уникальные:

=TEXTJOIN(CHAR(10),1,UNIQUE(TEXTAFTER(TEXTSPLIT(A1,,"|"),", ",-1)))

NOTE: I have used line-feeds as delimiter to join( remember to click on wrap text from Home Ribbon), one can use comma , or semi-colons ; as well or any other as per their suit.


Если у вас есть диапазон данных, как показано ниже, оберните приведенное выше вспомогательной функцией LAMBDA(), например BYROW() или MAP(), но я предпочитаю использовать опцию копирования вниз, поскольку функции TEXTJOIN() или ARRAYTOTEXT() имеют ограничения по количеству символов, однако, возможно, ваши записи будут все же будьте в пределах дозволенного.


=MAP(A1:A9,LAMBDA(α, 
 TEXTJOIN("; ",1,UNIQUE(TEXTAFTER(
 TEXTSPLIT(α,,"|"),", ",-1)))))

Ради интереса и, если возможно, попробуйте использовать REGEXREPLACE():

Формула в C1:

=REGEXREPLACE(A1:A3,"([^,|]+)(,\s*(?1))*(?=(?2))(((?2))\|(?=.*\4(\||$)))?,?\s*",)

Спасибо за добавление параметров регулярных выражений, теперь, когда я присоединился к «инсайдерам», я могу протестировать их на Mac;)

nkalvi 13.07.2024 22:14

Они такие веселые @nkalvi. На моей странице ☕ есть несколько интересных советов.

JvdV 13.07.2024 23:41

Берем последний столбец после разделения по столбцу (,) и строке (|):

A1:INDEX(A:A, COUNTA(A:A)) для автоматического расширения записей, добавленных позже.

=BYROW(
    A1:INDEX(A:A, COUNTA(A:A)),
    LAMBDA(row_,
        TEXTJOIN(
            CHAR(10),
            ,
            UNIQUE(TAKE(TEXTSPLIT(row_, ",", "|", FALSE, , ""), , -1))
        )
    )
)


РЕГИСТРАЦИОННОЕ ВЫРАЖЕНИЕ

Посмотрите вперед на | или конец строки (?=(\||$)), затем найдите , с помощью (?<=,) и соберите любой символ *, но [^,|], собрав все совпадения с REGEXEXTRACT(,,1):

=BYROW(
    A1:A4,
    LAMBDA(r,
        TEXTJOIN(
            REPT(CHAR(10), 2),
            ,
            UNIQUE(REGEXEXTRACT(r, "(?<=,)[^,|]*(?=(\||$))", 1))
        )
    )
)

Другие вопросы по теме

Подсчет количества ячеек, заполненных данными на основе указанных дат в будущем
Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки, а затем сопоставляйте с ними соответствующие данные с помощью нескольких гибких return_arrays
Какой лучший способ репликации суммифов, кроме создания формулы массива?
Как использовать логические операторы с динамическими массивами?
Excel: распечатать точное имя, найденное в списке, для точной даты
Как вернуть упорядоченные уникальные данные в Excel?
Удалить 0 из матрицы

Похожие вопросы

Запишите изображения в файл Excel — Selenium/Pandas/Python
Подсчет количества ячеек, заполненных данными на основе указанных дат в будущем
Запись в ячейку файла XLSX с помощью скрипта Sheets
Напишите цикл, который будет проверять все вкладки, количество листов, изменение цвета вкладок на основе значений трех ячеек
Как найти результат в соседней ячейке, если в ней используются буквы, форматирование и цифры?
Копирование ячеек без определенного текста в макросе Excel
Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays
Цикл VBA для извлечения сводки электронных писем за последние 30 дней