0

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

3 回答 3

1

您可以使用以下 UDF:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
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)

在此处输入图像描述

于 2016-08-31T20:32:11.667 回答
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")

SUBSTITUTEs 是删除尾随的(可能是矫枉过正的)方式", ",仅在需要时。根据需要复制尽可能多的行。

我的意思是编写一个数组公式,它适用于任意数量的列,而无需明确编写每一列,但显然CONCATENATE不适用于数组公式。

于 2016-08-31T20:41:20.053 回答
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,

我觉得你可以改进它以获得你想要的东西。

于 2016-08-31T20:28:14.367 回答