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

Ire*_*ene 3 excel vba concatenation excel-formula

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

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

(1) A       B       C           List
(2) Bob*    Mike    John*       A; C
(3) Jane    Lisa*   Brenda*     B; C
Run Code Online (Sandbox Code Playgroud)

*请注意,我有超过 100 列

我对 VBA 和 Concatenate 函数有点熟悉,但我不是专家。

感谢您花时间阅读这篇文章!

艾琳

Jvd*_*vdV 5

确实有多种选择:

选项 1:Excel TEXTJOIN

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

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,""))
Run Code Online (Sandbox Code Playgroud)

对于返回值或:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,""))
Run Code Online (Sandbox Code Playgroud)

用于返回列标题。输入两个公式并向CtrlShiftEnter下拖动。

选项 2:Google 电子表格 TEXTJOIN

如果您可以使用 Google 电子表格(免费使用,并且如果您只需要在可能值得传输数据时执行此操作),则可以使用相同的功能。它看起来像:

=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,"")))
Run Code Online (Sandbox Code Playgroud)

对于返回值或:

=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,"")))
Run Code Online (Sandbox Code Playgroud)

用于再次返回列标题。


请注意,在选项 1 和选项 2 中,我都使用了波形符 ,~作为转义字符,告诉 excel 我们确实在寻找星号。


选项 3:视觉基础

如果您没有支持TEXTJOIN()并使用 Google Spreadsheets 的 Excel 许可证,那么您最好的选择是 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
Run Code Online (Sandbox Code Playgroud)

在工作表中这样称呼它:

=CONCATENATEIF(A2:C2,"*")
Run Code Online (Sandbox Code Playgroud)

然后向下拖动...(请注意,这次我们不需要波浪号)。同样,如果您想返回标头,只需将其更改CONCATENATEIF = CONCATENATEIF & CL.Value & ", "CONCATENATEIF = CONCATENATEIF & Cells(1, CL.Column).Value & ", "


所有选项的输出:

在此输入图像描述

或者:

在此输入图像描述