Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 获取所有列的逗号分隔列标题,其中value>;从一行中删除0_Excel - Fatal编程技术网

Excel 获取所有列的逗号分隔列标题,其中value>;从一行中删除0

Excel 获取所有列的逗号分隔列标题,其中value>;从一行中删除0,excel,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,

我想获取所有列标题名称,其中一行的标题名称大于零

到目前为止,我已经尝试过这个
=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。非常感谢您的帮助

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,"")))," ",",")

我意识到上面的答案很有用,如果你不需要任何更具活力的东西,我的答案可能有点复杂

但是,如果您确实需要更具动态性的解决方案,您可以这样做: 假设您的标题位于单元格A1:E1中,下面的数据位于单元格A1:E1中,则第一步是获取一个函数,该函数返回与您的条件匹配的值: =如果(A2:E2>0,A$1:E$1,”) 您需要将其作为数组公式输入(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(arr作为变体)
arr=arr
作为整数的Dim i
将s变暗为字符串:s=“”
对于i=LBound(arr,1)到UBound(arr,1)
s=s&arr(一)&“
接下来我
joinArray=左(s,Len(s)-1
端函数
公共功能条(arr作为变型)
arr=arr
Dim v()作为变量
将k作为整数,将i作为整数
对于i=LBound(arr,1)到UBound(arr,1)
如果arr(i)“,则
重拨保留v(0到k)
v(k)=arr(i)
k=k+1
如果结束
接下来我
条带=v
端函数

现在可以调用=joinarray(strip(如果(A2:E2>0,A$1:E$1,“”))作为数组公式(Ctrl+Shift+Enter)

您的列号是动态的或固定的?例如列号可能是5、6、7,或者您只希望在5列中使用您在问题中共享的内容?@harun24hr它不是动态的。它将像问题中一样固定。如果可能,您是否也可以为此提供动态解决方案。例如,对于更多列,我将尝试对动态列执行此操作,并通过comme知道如果你能帮上忙,那就太好了。你可以更新答案。我会在VBA中试用。这也会有帮助。