Объединить и разделить значения столбцов, если они существуют

У меня есть таблица с тремя столбцами, значения которых могут быть разделены запятой, а могут и не быть. Например:

Столбец_1 Столбец_2 Столбец_3 А С Д, Э Ф А Икс З З

По сути, результат, который я ищу, заключается в том, что следующая ячейка содержит для каждого случая:

[Х]А, [Х]С

[X]D, [X]E, [X]F

[Х]А, [Х]Х, [Х]Z

[X]Z

Будучи [X] фиксированным значением, которое я добавляю к каждому случаю.

Можно ли это сделать с помощью стандартной формулы Excel?

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

Ответы 4

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

Я понимаю, что вы пытаетесь отформатировать свои данные так, чтобы каждое значение в вашей таблице, включая те, которые разделены запятыми, имело префикс [X]. Вы определенно можете сделать это с помощью формулы Excel. Вот как вы можете этого добиться:

  1. Настройте свои данные:

Допустим, ваши данные находятся в столбцах A, B и C, начиная со строки 2 (A2, B2, C2 и т. д.).

  1. Используйте эту формулу:

В новом столбце (давайте использовать столбец D) начните с D2 и введите следующую формулу:

=TEXTJOIN(", ", TRUE, IF(A2<>"", "[X]" & SUBSTITUTE(A2, ",", ", [X]"), ""), IF(B2<>"" , "[X]" & SUBSTITUTE(B2, ",", ", [X]"), ""), IF(C2<>"", "[X]" И ПОДСТАВИТЬ(C2, ",", ", [X]"), ""))

  1. Перетащите формулу вниз:

Перетащите формулу вниз от D2, чтобы сопоставить строки с вашими данными.

Хороший подход. Кстати, вы можете сделать 3 за один раз: =TEXTJOIN(", ", TRUE, IF(A2:C2<>"", "[X]" & SUBSTITUTE(A2:C2, ",", ", [X]"), ""))

P.b 16.07.2024 19:24
IF() не требуется: =TEXTJOIN(",",1,"[X]"&SUBSTITUTE(TOROW(A2:C2,1),", ",",[X]")) или =BYROW(A2:C5,LAMBDA(α, TEXTJOIN(",",1,"[X]"&SUBSTITUTE(TOROW(α,1),", ",",[X]"))))
Mayukh Bhattacharya 16.07.2024 19:59

Становится все лучше и лучше!

P.b 16.07.2024 21:21

Попробуйте использовать следующую формулу динамического массива:


=BYROW(A2:C5,LAMBDA(α,
 LET(δ, CONCAT(α&", "),
 TEXTJOIN(", ",1,"[X]"&TEXTSPLIT(δ,", ",,1)))))

Пояснения:

  • Использование функции BYROW(), которая применяет пользовательские LAMBDA() вычисления к каждой строке массива, чтобы вернуть в качестве вывода один единственный массив.
  • Итак, примененная здесь пользовательская функция внутри функции LET(), которая также помогает сократить избыточные вычисления, уменьшает использование повторяющихся формул.
  • Переменная δ определяется для объединения CONCAT(α) всех ячеек в строках в одну через запятую-разделитель.
  • Затем мы разделяем то же самое с помощью функции TEXTSPLIT() по столбцам и игнорируем пробелы, которые могут или не могут вернуться.
  • Наконец, перенос внутри функции TEXTJOIN() для переноса всего с помощью запятой-разделителя и пробела, а также с разделенным выводом было объединено фиксированное значение [X], чтобы получить желаемый вывод в виде одного массива.

Кроме того, не используя вспомогательную функцию LAMBDA(), можно использовать следующее, чтобы скопировать ее:

=TEXTJOIN(", ",1,"[X]"&TEXTSPLIT(CONCAT(TOROW(A2:C2,1)&", "),", ",,1))

Соединение-разделение-соединение

=LET(data,A2:C11,delimiter,", ",prefix,"X",
    dp,delimiter&prefix,
    BYROW(data,LAMBDA(r,LET(
        j,TEXTJOIN(delimiter,,IF(ISERROR(r),"",IF(r = "","",r))),
        IF(j = "","",prefix&TEXTJOIN(dp,,TEXTSPLIT(j,delimiter)))))))

Другой способ использования Office 365:

=ARRAYTOTEXT("[X]"&TEXTSPLIT(ARRAYTOTEXT(TOROW(A1:C1,1)),", "))

Я не знал о следующем «недостатке» ARRAYTOTEXT: его разделитель состоит из разделителя списка Excel и пробела, т. е. если разделителем списка является точка с запятой (;), формула не работает.

VBasic2008 16.07.2024 19:43

Приятно знать, @VBasic2008. Я действительно думаю - поскольку ОП использует запятую в качестве разделителя в своем образце - эта запятая будет разделителем, но спасибо, что опубликовали это. Я не знал.

P.b 16.07.2024 21:19

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

Excel для динамического создания сценария SQL с использованием формулы
Рассмотрим функцию Excel ЛИНЕЙН(B$3:B$18, $A$3:$A$18^{1,2,3,4,5}). Как мы можем заменить B$3:B$18 и $A$3:$A$18 переменными?
Excel автоматизирует создание динамического количества строк из другого набора данных
Автоматизировать формулу | Эксель
Нужна формула, которая поможет перепроверить значения и условия в разных столбцах
Excel – объединить все экземпляры текста перед разделителем в одну ячейку
Подсчет количества ячеек, заполненных данными на основе указанных дат в будущем
Суммируйте все ячейки, для которых соответствующая ячейка не является формулой и не возвращает #ЗНАЧЕНИЕ И дата произошла в прошлом
Сопоставление нескольких числовых строк и проверка соответствующих дат в течение 90 дней
Фильтруйте и сортируйте данные с помощью нескольких критериев столбца и строки и сопоставляйте с ними соответствующие данные с помощью фиксированных и гибких return_arrays