我有一种情况,我希望一个单元格根据另一组“触发”单元格显示某些信息。如果只有两个“触发单元”,那就简单一点:
*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语句之外,还有没有办法轻松地做到这一点?
谢谢。
答案 0 :(得分:2)
您可以使用CONCAT(对于较早的Excel版本,则使用CONCATENATE),其中一个IF在另一个之后:
InstanceType
这可能会增加逗号,但是我将让您研究如何清除它。
要在没有“是”的情况下添加“ N / A”,则可以将此公式再包装到一个IF中:
=CONCAT(IF(C1="Yes","Description 1,",""), IF(C2="Yes","Description 2,",""))
编辑:更复杂的解决方案
如果您有多个触发器,则创建所有可能结果的查找表,然后使用代码查找它可能会比较整洁:
将是/否转换为一系列的一和零(二进制代码)。
然后使用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)
结果:
甚至有一个ConcatenateIfs UDF用于多个条件。
编辑:
为便于将来参考,也许人们会使用适当的Excel,使用TEXTJOIN()
可以像这样:
{=TEXTJOIN(", ",TRUE,IF(C1:C6="yes",B1:B6,""))}