获取所有列的逗号分隔列标题,其中值>连续0

时间:2015-12-24 08:14:05

标签: excel

我想让所有列标题名称在一行中大于零。

到目前为止,我已尝试过此=IF(COUNTA($A2:$E2)=0,"",INDEX($A$1:$E$1,MATCH(TRUE,INDEX($A2:$E2>0,0),0))

它给出了第一列大于零的名称。

a   b   c   d   e   
0   1   0   1   1   b
1   0   0   1   0   a

我需要这样的东西

a   b   c   d   e   
0   1   0   1   1   b,d,e
1   0   0   1   0   a,d

我之前从未使用过excel。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

我意识到上面的答案是完成工作的,如果你不需要任何更动态的话,我的工作可能有点复杂。

但是,如果您确实需要更动态的解决方案,则可以执行以下操作: 假设您的标题位于单元格A1:E1和下面的数据中,第一步是让函数返回符合您条件的值: = IF(A2:E2大于0,A $ 1:E $ 1"&#34) 您需要将其输入为数组公式(Ctrl + Shift + Enter)

这会返回一个返回大量空白的数组,因此我们还需要处理两件事: 1.从该阵列中删除空白 2.连接数组,使其返回逗号分隔的字符串

不幸的是,Excel没有任何这些功能(真的很遗憾),所以你需要一些VBA魔术:

Public Function joinArray(arr As Variant)
   arr = arr
   Dim i As Integer
   Dim s As String: s = ""
   For i = LBound(arr, 1) To UBound(arr, 1)
      s = s & arr(i) & ","
   Next i
   joinArray = Left(s, Len(s) - 1)
End Function

Public Function Strip(arr As Variant)
   arr = arr
   Dim v() As Variant
   Dim k As Integer, i As Integer
   For i = LBound(arr, 1) To UBound(arr, 1)
      If arr(i) <> "" Then
         ReDim Preserve v(0 To k)
         v(k) = arr(i)
         k = k + 1
      End If
   Next i
   Strip = v
End Function

你现在可以调用= joinarray(strip(IF(A2:E2&gt; 0,A $ 1:E $ 1,&#34;&#34;)))作为数组公式(Ctrl + Shift + Enter)

答案 1 :(得分:1)

F2单元格中使用此公式并填写。

=SUBSTITUTE(TRIM(CONCATENATE(IF(A2>0,$A$1 & " ",""),IF(B2>0,$B$1& " ",""),IF(C2>0,$C$1& " ",""),IF(D2>0,$D$1& " ",""),IF(E2>0,$E$1,"")))," ",",")

enter image description here