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

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 &amp; CL.Value &amp; ", " 更改为 CONCATENATEIF = CONCATENATEIF &amp; Cells(1, CL.Column).Value &amp; ", "


所有选项的输出:

或者:

【讨论】:

以上是关于如果范围中的单元格包含特定文本/字符,如何连接列标题的主要内容,如果未能解决你的问题,请参考以下文章

将特定文本从一个范围内的一个单元格移动到另一个范围内的另一个单元格

EXCEL中的CELL函数怎么用

在表格视图的特定单元格中创建文本字段

如果一个单元格包含一个字符串

Google 表格 - 返回包含特定文本的单元格的列号

如何从包装的文本单元格中提取特定的文本行?