Excel 公式到 return 多列名称

Excel formula to return multiple column names

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

我想你可以试试这样的方法:

    =(IF(EXACT(A2;"Yes");A1 & ", ";"")) & (IF(EXACT(B2;"Yes");B1 & ", ";""))  & (IF(EXACT(C2;"Yes");C1 & ", ";"")) & (IF(EXACT(D2;"Yes");D1 & ", ";""))

会检测单元格字符串是否对应"Yes",如果是,则写入的字符串为header,否则写入的字符串为""。 我还用 & 符号与其他三个 IF 条件连接。

将此公式应用于数组的第一行 return 得到以下结果:

    header 2, header 3,

我认为你可以改进它以获得你想要的。

您可以使用以下 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:$D,""))

作为一个数组,退出编辑模式时需要使用Ctrl-Shift-Enter而不是Enter来确认。如果操作正确,那么 Excel 将在公式周围放置 {}

要用 IF 公式得到它,这将 return 同样的事情,因为你只有四个。如果你有四个以上,这会变得很长。

=LEFT(IF(A2="Yes",$A & ",","") & IF(B2="Yes",$B & ",","") & IF(C2="Yes",$C & ",","") & IF(D2="Yes",$D & ",",""),LEN(IF(A2="Yes",$A & ",","") & IF(B2="Yes",$B & ",","") & IF(C2="Yes",$C & ",","") & IF(D2="Yes",$D & ",",""))-1)

不需要UDF

使用

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(A2="Yes",A&", ","")&IF(B2="Yes",B&", ","")&IF(C2="Yes",C&", ","")&IF(D2="Yes",D&", ",""),", H","-H"),", ",""),"-H",", H")

SUBSTITUTEs 是一种(可能矫枉过正)删除尾随 ", " 的方法,仅在需要时使用。 根据需要向下复制尽可能多的行。

我打算写一个数组公式,它适用于任意数量的列而无需显式地写每一列,但显然 CONCATENATE 不适用于数组公式。