我正在尝试根据特定条件创建一个列名列表(如果单元格包含“ *”)。
基本上,我试图让Excel自动创建第四列:
(1) A B C List
(2) Bob* Mike John* A; C
(3) Jane Lisa* Brenda* B; C
*请注意,我有超过100列
我对VBA和Concatenate函数有点熟悉,但是我不是专家。
感谢您抽出宝贵的时间阅读这篇文章!
Irene
答案 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 & ", "
所有选项的输出:
或: