Действительно несколько вариантов:
Вариант 1: Excel TEXTJOIN
Если у вас есть лицензия Excel, поддерживающая TEXTJOIN()
Вы можете использовать:
=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,""))
Для возврата значений или:
=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,""))
Для возврата заголовков столбцов.Введите обе формулы с помощью Ctrl Shift Введите и перетащите вниз.
Параметр 2: Таблица Google TEXTJOIN
Если вы можете использовать электронные таблицы Google (бесплатны, и если вам просто нужно выполнить эту операцию, как только это может быть целесообразно для передачи ваших данных), ей доступны те же функции,Это будет выглядеть следующим образом:
=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,"")))
Для возвращаемых значений или:
=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,"")))
Для повторного возврата заголовков столбцов.
Примечание в обоих параметрах1 и Вариант 2 Я использовал тильду, ~
, в качестве экранирующего символа, говорящего о превосходстве, мы буквально искали звездочку.
Вариант 3: Визуальные основы
Если у вас нет лицензии Excel, поддерживающей TEXTJOIN()
, и использование таблиц Google также не подходит, лучше всего ставить UDF (пользовательскую функцию), например:
Function CONCATENATEIF(RNG As Range, CON As String) As String
For Each CL In RNG
If InStr(1, CL.Value, CON) > 0 Then CONCATENATEIF = CONCATENATEIF & CL.Value & ", "
Next CL
If CONCATENATEIF <> "" Then
CONCATENATEIF = Left(CONCATENATEIF, Len(CONCATENATEIF) - 2)
End If
End Function
Назовите это в своем рабочем листе как:
=CONCATENATEIF(A2:C2,"*")
И перетащите вниз ... (обратите внимание, на этот раз нам не нужна тильда).Аналогично, если вы хотите вернуть заголовки, просто измените CONCATENATEIF = CONCATENATEIF & CL.Value & ", "
на CONCATENATEIF = CONCATENATEIF & Cells(1, CL.Column).Value & ", "
Вывод для всех параметров:
Или: