如果范围中的单元格包含特定文本/字符,如何连接列标题
Posted
技术标签:
【中文标题】如果范围中的单元格包含特定文本/字符,如何连接列标题【英文标题】:How to concatenate column titles if cells in a range contains a specific text/character 【发布时间】:2019-10-21 07:26:12 【问题描述】:我正在尝试根据特定条件创建列名列表(如果单元格包含“*”)。
基本上,我正在尝试让 Excel 自动创建第四列:
(1) A B C List
(2) Bob* Mike John* A; C
(3) Jane Lisa* Brenda* B; C
*请注意,我有超过 100 列
我对 VBA 和 Concatenate 函数有点熟悉,但我不是专家。
感谢您花时间阅读这篇文章!
艾琳
【问题讨论】:
您有足够新的 Excel 以使用 TEXTJOIN() 吗? 【参考方案1】:真的是多个选项:
选项 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,""))
用于返回列标题。通过 CtrlShiftEnter 输入两个公式并向下拖动。
选项 2:Google Spreadsheet 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 我使用了波浪号 ~
作为转义字符,告诉 excel 我们确实在寻找星号。
选项 3:Visual Basics
如果您没有支持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(A2:C2,"*")
然后向下拖动...(注意这次我们不需要波浪号)。同样,如果您想返回标头,只需将 CONCATENATEIF = CONCATENATEIF & CL.Value & ", "
更改为 CONCATENATEIF = CONCATENATEIF & Cells(1, CL.Column).Value & ", "
所有选项的输出:
或者:
【讨论】:
以上是关于如果范围中的单元格包含特定文本/字符,如何连接列标题的主要内容,如果未能解决你的问题,请参考以下文章