美国联合航空 MileagePlus Premier 身份级别由以下标准决定:
- 银:
(PQM>=25000 OR PQS>=30) AND PQD>=3000
- 金子:
(PQM>=50000 OR PQS>=60) AND PQD>=6000
- 铂:
(PQM>=75000 OR PQS>=90) AND PQD>=9000
- 1千:
(PQM>=100000 OR PQS>=120) AND PQD>=12000
我有包含 PQM、PQS 和 PQD 总数的列。我想要一个公式来显示状态级别(例如“金牌”)。我需要一组复杂的嵌套 IF 语句吗?我是否需要以某种方式进行查找?
答案1
INDEX
这是使用和的另一种方法MATCH
,它是一个更抽象的,但也是基于您的逻辑的更短的公式:
=INDEX(Table1[LEVEL],MIN(MAX(MATCH(B9,Table1[PQM]),MATCH(C9,Table1[PQS])),MATCH(D9,Table1[PQD])))
(PQM>=25000 或 PQS>=30)且 PQD>=3000
PQM>=25000 OR PQS>=30
- PQM 或 PQS 达到的更高等级 => MAX(...) AND PQD>=3000
- 先前选择和 PQD 所达到的较低级别
或者仅仅是没有辅助表的公式:
=INDEX({"--","Silver","Gold","Platinum","1k"},MIN(MAX(MATCH(B9,{0,25000,50000,75000,100000}),MATCH(C9,{0,30,60,90,120})),MATCH(D9,{0,3000,6000,9000,12000})))
答案2
因此,如果您确实想采用嵌套IF
解决方案,您可以创建一个如下的小型查找表:
然后,如果您的PQM
、PQS
和PQD
值分别在B8
、C8
和中D8
,则公式将为:
=IF(AND(OR(B8>$B$5,C8>$C$5),D8>$D$5),$A$5,IF(AND(OR(B8>$B$4,C8>$C$4),D8>$D$4),$A$4,IF(AND(OR(B8>$B$3,C8>$C$3),D8>$D$3),$A$3,IF(AND(OR(B8>$B$2,C8>$C$2),D8>$D$2),$A$2,"None"))))
如果您不想有查找表,那么您可以轻松地用硬编码值替换表引用(尽管我更喜欢有它以防您将来需要更改计算参数):
=IF(AND(OR(B8>100000,C8>120),D8>12000),"1K",IF(AND(OR(B8>75000,C8>90),D8>9000),"Platinum",IF(AND(OR(B8>50000,C8>60),D8>6000),"Gold",IF(AND(OR(B8>25000,C8>30),D8>3000),"Silver","None"))))
希望它的工作原理相当明显,它首先检查最高级别的条件,然后,如果不满足,则逐级检查,直到找到一个适用的级别,"None"
如果没有适用的级别可返回,则返回。