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 函数有点熟悉,但我不是专家。
感谢您花时间阅读这篇文章!
艾琳
确实有多种选择:
选项 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 & ", "
所有选项的输出:
或者: