Как объединить заголовки столбцов, если ячейки в диапазоне содержат определенный текст / символ - PullRequest
2 голосов
/ 05 июня 2019

Я пытаюсь создать список имен столбцов на основе определенных критериев (если ячейка содержит «*»).

Обычно я пытаюсь заставить Excel автоматически создать четвертый столбец:

(1) A       B       C           List
(2) Bob*    Mike    John*       A; C
(3) Jane    Lisa*   Brenda*     B; C

* Обратите внимание, что у меня более 100 столбцов

Я немного знаком с VBA и функцией Concatenate, но я не эксперт.

Спасибо, что нашли время, чтобы прочитать этот пост!

Ирэн

1 Ответ

3 голосов
/ 05 июня 2019

Действительно несколько вариантов:

Вариант 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 & ", "


Вывод для всех параметров:

enter image description here

Или:

enter image description here

...