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

时间:2019-06-05 18:47:01

标签: 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和Concatenate函数有点熟悉,但是我不是专家。

感谢您抽出宝贵的时间阅读这篇文章!

Irene

1 个答案:

答案 0 :(得分:3)

确实有多种选择:

选项1:Excel TEXTJOIN

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

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,""))

用于返回值或:

=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),$A$1:$C$1,""))

用于返回列标题。通过 Ctrl Shift 输入输入两个公式并向下拖动。

选项2:Google Spreadsheet TEXTJOIN

如果您可以使用Google Spreadsheets(免费使用,并且只需要执行一次此操作就可以转移数据),则可以使用相同的功能。它看起来像:

=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH("~*",A2:C2)),A2:C2,"")))

用于返回值或:

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

用于再次返回列标题。


在选项1和选项2中的注意事项我已经使用波浪号~作为转义字符,告诉excel我们实际上是在寻找星号。


选项3:Visual Basics

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