Excel 如果区域中的单元格包含特定文本/字符,如何连接列标题

Excel 如果区域中的单元格包含特定文本/字符,如何连接列标题,excel,vba,excel-formula,concatenation,Excel,Vba,Excel Formula,Concatenation,我正在尝试根据特定条件创建列名列表(如果单元格包含“*”) 基本上,我试图让Excel自动创建第四列: (1) A B C List (2) Bob* Mike John* A; C (3) Jane Lisa* Brenda* B; C *请注意,我有100多列 我有点熟悉VBA和连接函数,但我不是专家 感谢您抽出时间阅读这篇文章 艾琳有多种选择: 选项1: 如果您有支持TEXTJOIN()的Excel许可

我正在尝试根据特定条件创建列名列表(如果单元格包含“*”)

基本上,我试图让Excel自动创建第四列:

(1) A       B       C           List
(2) Bob*    Mike    John*       A; C
(3) Jane    Lisa*   Brenda*     B; C
*请注意,我有100多列

我有点熟悉VBA和连接函数,但我不是专家

感谢您抽出时间阅读这篇文章


艾琳

有多种选择:

选项1:

如果您有支持
TEXTJOIN()
的Excel许可证,您可以使用:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,""))
用于返回值或:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,""))
=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,"")))
用于返回列标题。通过CtrlShift输入两个公式并向下拖动

选项2:

如果你可以使用谷歌电子表格(免费使用,如果你只需要做这个操作,一旦它可能值得传输你的数据),她同样的功能是可用的。它看起来像:

=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,"")))
用于返回值或:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,""))
=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,"")))
用于再次返回列标题


注意,在选项1和选项2中,我都使用了一个波浪号,
~
,作为转义字符,告诉excel我们实际上在寻找星号


选项3:视觉基础

如果您没有支持
TEXTJOIN()
的Excel许可证,并且也没有使用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=CONCATENATEIF&CL.Value&“,”
更改为
CONCATENATEIF=CONCATENATEIF&Cells(1,CL.Column.Value&“,”


所有选项的输出:

或:


您是否有足够新的Excel,可以使用TEXTJOIN()?