如何根据条件附加到文本

时间:2019-11-27 08:20:25

标签: excel vba excel-formula user-defined-functions

如何根据前一列的值在结果列中创建公式 enter image description here

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

2 个答案:

答案 0 :(得分:2)

如果您碰巧可以使用TEXTJOIN功能,则可以使用以下功能:

enter image description here

F2中的公式:

=TEXTJOIN(",",TRUE,IF(A2:E2>0,$A$1:$E$1,""))

注1:这是一个数组公式,需要通过 Ctrl Shift Enter 进行确认

注意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)并向下拖动。

答案 1 :(得分:0)

您可以使用=CONCAT(IF(A2:E2>0;$A$1:$E$1&",";""))作为数组公式,并按 Shift Ctrl Enter 确认。 在您的示例中,将此公式放在F2单元格中。将该公式扩展到整个范围 这里剩下的就是删除结果字符串末尾的逗号。

完整的公式就是这样

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