Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 如何根据条件附加到文本_Excel_Vba_Excel Formula_User Defined Functions - Fatal编程技术网

Excel 如何根据条件附加到文本

Excel 如何根据条件附加到文本,excel,vba,excel-formula,user-defined-functions,Excel,Vba,Excel Formula,User Defined Functions,如何基于上一列的值在结果列中创建公式 如果前面任何列(从c1到c5)中的值大于零,我想将其添加到结果中。如果您碰巧可以访问TEXTJOIN函数,则可以使用以下选项: F2中的公式: =TEXTJOIN(",",TRUE,IF(A2:E2>0,$A$1:$E$1,"")) 注1:这是一个数组公式,需要通过CtrlShift Center确认 注意2:如果不访问TEXTJOIN这将成为一个痛苦得多的过程,但对于这5列,您可以尝试=IF(A2>0,a$1&“,”,”)&IF(B2>0,B$

如何基于上一列的值在结果列中创建公式


如果前面任何列(从c1到c5)中的值大于零,我想将其添加到结果中。

如果您碰巧可以访问
TEXTJOIN
函数,则可以使用以下选项:

F2中的公式:

=TEXTJOIN(",",TRUE,IF(A2:E2>0,$A$1:$E$1,""))
注1:这是一个数组公式,需要通过CtrlShift Center确认

注意2:如果不访问
TEXTJOIN
这将成为一个痛苦得多的过程,但对于这5列,您可以尝试
=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&“,”,”)
,但是您必须扩展以去掉后面的逗号


如果上述两个选项都不可行,那么您最好编写一个UDF。对于本练习,您可以编写一个相当简单的练习:

Public Function TextJoin2(rng1 As Range, rng2 As Range) As String

With Application
    Dim arr As Variant: arr = .Evaluate("IF(" & rng1.Address & ">0," & rng2.Address & ","" "")")
    TextJoin2 = Replace(.Trim(Join(arr, " ")), " ", ",")
End With

End Function
调用
F2
如:
=TEXTJOIN2(A2:E2,A$1:E$1)
并向下拖动。

您可以使用
=CONCAT(如果(A2:E2>0;$A$1:$E$1&>,“;”)
作为数组公式,用移位寄存器确认。 将此公式放入示例中的
F2
单元格中。将公式扩展到整个范围 这里剩下的是删除结果字符串末尾的逗号

完整的公式是这样的


=LEFT(CONCAT(IF(A2:E2>0;$A$1:$E$1&“,”;”);LEN(CONCAT(IF(A2:E2>0;$A$1:$E$1&“,”;”))-1)

如果您碰巧可以访问
TEXTJOIN
函数,它非常简单。否则,只需5列,就可以编写堆叠的
IF
条件。如果你有更多的列,你最好的选择就是写一个UDF。如果有人可以访问
CONCAT
他们可以访问
TEXTJOIN
。这使得你的第二次锻炼变得多余。@HaroonFuad,这对你有帮助吗?如果是这样,考虑将投票/标记作为关闭线程的答案。