我正在尝试获取一个搜索每行“是”的公式。然后它应列出列名称。某些行可能只有1个是,有些可能有3个或更多。我尝试过搜索和编辑几个建议,但无法得到我需要的建议。有些公式会给我一个随机列名,只有1.其他只是错误输出。
Header 1 Header 2 Header 3 Header 4 List
No Yes Yes No Header 2, Header 3
Yes No Yes Yes Header 1, Header 3, Header 4
No No No Yes Header 4
Yes Yes No Yes Header 1, Header 2, Header 4
答案 0 :(得分:1)
您可以使用以下UDF:
Function TEXTJOIN(delimiter As String, ignore_empty As String, rng) As String
Dim i As Long
Dim textn() As Variant
textn = rng
For i = LBound(textn) To UBound(textn)
If Len(textn(i)) = 0 Then
If Not ignore_empty = True Then
TEXTJOIN = TEXTJOIN & textn(i) & delimiter
End If
Else
TEXTJOIN = TEXTJOIN & textn(i) & delimiter
End If
Next
TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - 1)
End Function
将其放在工作表附带的模块中。
然后你可以像使用以下数组公式的任何其他公式一样调用它:
=TEXTJOIN(",",TRUE,IF(A2:D2="Yes",$A$1:$D$1,""))
作为一个数组,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么Excel会将{}
放在公式周围。
要使用IF公式得到它,这将返回相同的东西,因为你只有四个。如果你有四个以上,这将会很长。
=LEFT(IF(A2="Yes",$A$1 & ",","") & IF(B2="Yes",$B$1 & ",","") & IF(C2="Yes",$C$1 & ",","") & IF(D2="Yes",$D$1 & ",",""),LEN(IF(A2="Yes",$A$1 & ",","") & IF(B2="Yes",$B$1 & ",","") & IF(C2="Yes",$C$1 & ",","") & IF(D2="Yes",$D$1 & ",",""))-1)
答案 1 :(得分:0)
我认为你可以尝试这样的事情:
=(IF(EXACT(A2;"Yes");A1 & ", ";"")) & (IF(EXACT(B2;"Yes");B1 & ", ";"")) & (IF(EXACT(C2;"Yes");C1 & ", ";"")) & (IF(EXACT(D2;"Yes");D1 & ", ";""))
它将测试单元格字符串是否对应于"是"如果是这种情况,则写入的字符串是标题,否则写入的字符串是""。 我还和其他三个IF条件连接了&符号
在数组的第一行应用此公式会返回以下结果:
header 2, header 3,
我认为你可以改进它以获得你想要的东西。
答案 2 :(得分:0)
不需要UDF
使用
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(A2="Yes",A$1&", ","")&IF(B2="Yes",B$1&", ","")&IF(C2="Yes",C$1&", ","")&IF(D2="Yes",D$1&", ",""),", H","-H"),", ",""),"-H",", H")
SUBSTITUTE
是一种(可能是矫枉过正的)删除尾随", "
的方式,仅在需要时。
根据需要向下复制多行。
我的意思是编写一个数组公式,它可以适用于任意数量的列而无需显式写入每个列,但显然CONCATENATE
不适用于数组公式。