仅在适用时显示项目说明-在Excel中没有几个嵌套的IF函数的情况下如何执行?

时间:2019-06-04 15:49:04

标签: excel excel-formula

我有一种情况,我希望一个单元格根据另一组“触发”单元格显示某些信息。如果只有两个“触发单元”,那就简单一点:

*Trigger Cells:

Display description 1? (C1)   Yes
Display description 2? (C2)   No


Display Cell (A1) Formula = 
IF(AND(C1 = "Yes", C2 = "Yes), "Description 1" & "Description 2", IF(C1 = "Yes", "Description 1", IF(C2 = "Yes", "Description 2", "N/A"))))

这是通过查看所有不同的组合来完成的:两个触发器都是“ yes”;只有触发器1是“是”;只有触发器2是“是”; (由“如果错误则为值”组成“两个触发器均为'no'组合)

问题是当我有两个以上的触发单元时,比如说6个或更多(描述数=触发单元数)。除了创建包含所有是/否组合的复杂的IF语句之外,还有没有办法轻松地做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用CONCAT(对于较早的Excel版本,则使用CONCATENATE),其中一个IF在另一个之后:

InstanceType

这可能会增加逗号,但是我将让您研究如何清除它。

要在没有“是”的情况下添加“ N / A”,则可以将此公式再包装到一个IF中:

=CONCAT(IF(C1="Yes","Description 1,",""), IF(C2="Yes","Description 2,",""))

编辑:更复杂的解决方案

如果您有多个触发器,则创建所有可能结果的查找表,然后使用代码查找它可能会比较整洁:

enter image description here

将是/否转换为一系列的一和零(二进制代码)。

然后使用INDEX MATCH查找代码。

这使得更新特定组合的结果非常容易,而无需梳理一个很长的公式。

答案 1 :(得分:1)

您可以在此处使用CHOOSE,这也允许您扩展到更多描述选项:

C1 | C2 | Output
 N |  N | N/A
 Y |  N | Desc1
 N |  Y | Desc2
 Y |  Y | Desc1 & Desc2

现在,如果将它们组合成二进制位,则可以将C1=Yes设置为00或01(十进制为0或1),将C2=Yes设置为00或10(十进制为0或2) ,然后将它们添加在一起:

C1 | C2 | Output
 N |  N | 0 + 0 = 0
 Y |  N | 1 + 0 = 1
 N |  Y | 0 + 2 = 2
 Y |  Y | 1 + 2 = 3

然后加1,因为CHOOSE被1索引:

=CHOOSE(1 + (C1="Yes") + 2*(C2 = "Yes"), "N/A", "Description 1", "Description 2", "Description 1" & "Description 2")

答案 2 :(得分:1)

尽管我一直偏爱非VBA解决方案,但在这种情况下,模拟自己的串联IF函数(以便我们可以根据标准进行测试)可以很好地替代TEXTJOIN()公式。

例如,取自here

Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, _
        ConcatenateRange As Range, Optional Separator As String = ",") As Variant
    Dim i As Long
    Dim strResult As String
    On Error GoTo ErrHandler
    If CriteriaRange.Count <> ConcatenateRange.Count Then
        ConcatenateIf = CVErr(xlErrRef)
        Exit Function
    End If
    For i = 1 To CriteriaRange.Count
        If CriteriaRange.Cells(i).Value = Condition Then
            strResult = strResult & Separator & ConcatenateRange.Cells(i).Value
        End If
    Next i
    If strResult <> "" Then
        strResult = Mid(strResult, Len(Separator) + 1)
    End If
    ConcatenateIf = strResult
    Exit Function
ErrHandler:
    ConcatenateIf = CVErr(xlErrValue)
End Function

这样称呼:

=ConcatenateIf(C1:C6,"yes",B1:B6)

结果:

enter image description here

甚至有一个ConcatenateIfs UDF用于多个条件。

编辑:

为便于将来参考,也许人们会使用适当的Excel,使用TEXTJOIN()可以像这样:

{=TEXTJOIN(", ",TRUE,IF(C1:C6="yes",B1:B6,""))}