在上面的excel表中,我需要一个公式,它将提取存在“1”的特定列名,并在相应的单元格中输入该名称。示例 - 在上面的图像中,对应于col“Tags”的每一行包含其对应单元格包含“1”的列名。
答案 0 :(得分:2)
对于4列示例,您可以使用:
=SUBSTITUTE(TRIM(IF(A2,$A$1,"")&" "&IF(B2,$B$1,"")&" "&IF(C2,$C$1,"")&" "&IF(D2,$D$1,""))," ",", ")
对于7列,只需按照相同的模式在IF
内添加其他TRIM
语句。
该公式依赖于1=TRUE
来保持简短。每个IF
的结果后跟一个空格。当TRIM
没有发生时,1
会消除额外的空格。最后SUBSTITUTE
将转换为
,
,以便您获得以逗号分隔的列表。
请注意:
TRIM从文本中删除多余的空格,在文本的开头或结尾处只留下单词之间的单个空格,并且没有空格字符。
答案 1 :(得分:0)
无法找到用于连接范围的非vba解决方案。所以这是一个UDF
Function conCatRange(ByVal criteriaRange As range, _
ByVal criteria As String, _
ByVal conRange As range, _
ByVal separator As String) As String
Dim c As range
conCatRange = ""
For i = 1 To conRange.Columns.Count
If (criteriaRange(1, i) = criteria) Then
conCatRange = conCatRange & conRange(1, i) & separator
End If
Next i
conCatRange = Left(conCatRange, Len(conCatRange) - 1)
End Function
如果要添加摘要和参数说明,请参阅此链接 How to put a tooltip on a user-defined function
答案 2 :(得分:0)
假设您的标题范围是A-K,
你可以从L2开始使用这个公式:
= IF(MID(TRIM(A2 = 1,A $ 1,“”)& IF(B2 = 1,“,”& B $ 1,“”)& IF(C2 = 1,“ ,“& C $ 1”,“”和& IF(D2 = 1,“,”& D $ 1,“”)& IF(E2 = 1,“,”& E $ 1,“”)& IF(F2 = 1,“,”& F $ 1,“”)& IF(G2 = 1,“,”& G $ 1,“”)& IF(H2 = 1,“,”& H $ 1,“”)& IF(I2 = 1,“,”& I $ 1,“”)& IF(J2 = 1,“,”& J $ 1,“”)& IF(K2 = 1 ,“,”& K $ 1,“”)),1,2)=“,”,MID(TRIM(IF(A2 = 1,A $ 1,“”)& IF(B2 = 1,“,” & B $ 1,“”)& IF(C2 = 1,“,”& $ C $ 1,“”)& IF(D2 = 1,“,”& D $ 1,“”)& IF (E2 = 1,“,”& E $ 1,“”)& IF(F2 = 1,“,”& F $ 1,“”)& IF(G2 = 1,“,”& G $ 1 ,“”)& IF(H2 = 1,“,”& H $ 1,“”)& IF(I2 = 1,“,”& I $ 1,“”)& IF(J2 = 1, “,”& J $ 1,“”)& IF(K2 = 1,“,”& K $ 1,“”)),3,1000),TRIM(IF(A2 = 1,A $ 1,“”) )& IF(B2 = 1,“,”& B $ 1,“”)& IF(C2 = 1,“,”& C $ 1,“”)& IF(D2 = 1,“,” & D $ 1,“”)& IF(E2 = 1,“,”& E $ 1,“”)& IF(F2 = 1,“,”& F $ 1,“”)& IF( G2 = 1,“,”& G $ 1,“”)& IF(H2 = 1,“,”& H $ 1,“”)& IF(I2 = 1,“,”& I $ 1, “”)& IF(J2 = 1,“,”& J $ 1,“”)& IF(K2 = 1,“,”& K $ 1,“”)))
此公式在mid函数的列中限制为1000个字符。由于分隔符,它重复相同公式的3倍:“,”但是如果你不介意结果格式,你可以将它缩短为1。只需在列中填写1,列名称就会出现。
希望这有帮助。