Excel公式返回多个列名

时间:2016-08-31 20:04:25

标签: excel textjoin

我正在尝试获取一个搜索每行“是”的公式。然后它应列出列名称。某些行可能只有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

3 个答案:

答案 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会将{}放在公式周围。

enter image description here

要使用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)

enter image description here

答案 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不适用于数组公式。