Excel 将单元格引用用作具有多个条件的逻辑运算符并查找值
Excel Using Cell Reference as a Logical Operator with Multiple Criteria and Looking Up a Value
不太确定如何解决这个问题。希望根据 2 条规则使用正确的 CMG 代码填充突出显示的单元格(F15、F16、G15、G16)。这些规则位于上 table 列 D:H 中。每个规则分为 3 列,指定的指标、运算符和值。大多数规则检查运动分数,而一些检查年龄,在某些情况下只有 1 条规则。在 CMG 填充到单元格 F15 和 F16 后,我将需要使用该代码在列 I:L 中查找权重(这应该是一个相当简单的任务)。
宁愿使用公式而不是 VBA 来完成此操作。有任何想法吗?谢谢!
注意,突出显示的单元格应为以下值:
- F15=202
- F16=105
- G15 = 1.2534
- G16 = 1.9391
这题和这题很像,不过我有2套rules/criteria。此外,我的规则能够在 Motor、Age 和(空白)之间切换。
使用以下公式在 table 中为 "Bob" 获取所需的行,然后您可以为 "Steve" 等填充该行(然后您可以使用此结果在 INDEX
公式中获得 CMG 和重量)。请注意,您必须将其作为数组公式提交 (ctrl
+shift
+enter
).
=MATCH("TRUETRUETRUE",($A:$A=B15)&IF(LEN($C:$C)>0,CHOOSE(MATCH($C:$C,$C:$D,0),CHOOSE(MATCH($D:$D,{">",">=","<","<="},0),$C15>$E:$E,$C15>=$E:$E,$C15<$E:$E,$C15<=$E:$E),CHOOSE(MATCH($D:$D,{">",">=","<","<="},0),$D15>$E:$E,$D15>=$E:$E,$D15<$E:$E,$D15<=$E:$E)),TRUE)&IF(LEN($F:$F)>0,CHOOSE(MATCH($F:$F,$C:$D,0),CHOOSE(MATCH($G:$G,{">",">=","<","<="},0),$C15>$H:$H,$C15>=$H:$H,$C15<$H:$H,$C15<=$H:$H),CHOOSE(MATCH($G:$G,{">",">=","<","<="},0),$D15>$H:$H,$D15>=$H:$H,$D15<$H:$H,$D15<=$H:$H)),TRUE),0)
EDIT Tom Sharp 有一个使用 COUNTIFS 的好建议,它允许您直接使用逻辑运算符。这导致更短、更直接的公式(您仍然必须将其作为数组公式提交):
=MATCH(4,IF($C:$C=$C,COUNTIFS(B15,A:A,C15,D:D&E:E)>0,1)+IF($F:$F=$C,COUNTIFS(B15,A:A,C15,G:G&H:H)>0,1)+IF($C:$C=$D,COUNTIFS(B15,A:A,D15,D:D&E:E)>0,1)+IF($F:$F=$D,COUNTIFS(B15,A:A,D15,G:G&H:H)>0,1),0)
基本上,对于每一行,您要检查 Motor 和 Age 的每条规则,以确保所有四种情况都为真或不适用。
不太确定如何解决这个问题。希望根据 2 条规则使用正确的 CMG 代码填充突出显示的单元格(F15、F16、G15、G16)。这些规则位于上 table 列 D:H 中。每个规则分为 3 列,指定的指标、运算符和值。大多数规则检查运动分数,而一些检查年龄,在某些情况下只有 1 条规则。在 CMG 填充到单元格 F15 和 F16 后,我将需要使用该代码在列 I:L 中查找权重(这应该是一个相当简单的任务)。
宁愿使用公式而不是 VBA 来完成此操作。有任何想法吗?谢谢!
注意,突出显示的单元格应为以下值:
- F15=202
- F16=105
- G15 = 1.2534
- G16 = 1.9391
这题和这题很像,不过我有2套rules/criteria。此外,我的规则能够在 Motor、Age 和(空白)之间切换。
使用以下公式在 table 中为 "Bob" 获取所需的行,然后您可以为 "Steve" 等填充该行(然后您可以使用此结果在 INDEX
公式中获得 CMG 和重量)。请注意,您必须将其作为数组公式提交 (ctrl
+shift
+enter
).
=MATCH("TRUETRUETRUE",($A:$A=B15)&IF(LEN($C:$C)>0,CHOOSE(MATCH($C:$C,$C:$D,0),CHOOSE(MATCH($D:$D,{">",">=","<","<="},0),$C15>$E:$E,$C15>=$E:$E,$C15<$E:$E,$C15<=$E:$E),CHOOSE(MATCH($D:$D,{">",">=","<","<="},0),$D15>$E:$E,$D15>=$E:$E,$D15<$E:$E,$D15<=$E:$E)),TRUE)&IF(LEN($F:$F)>0,CHOOSE(MATCH($F:$F,$C:$D,0),CHOOSE(MATCH($G:$G,{">",">=","<","<="},0),$C15>$H:$H,$C15>=$H:$H,$C15<$H:$H,$C15<=$H:$H),CHOOSE(MATCH($G:$G,{">",">=","<","<="},0),$D15>$H:$H,$D15>=$H:$H,$D15<$H:$H,$D15<=$H:$H)),TRUE),0)
EDIT Tom Sharp 有一个使用 COUNTIFS 的好建议,它允许您直接使用逻辑运算符。这导致更短、更直接的公式(您仍然必须将其作为数组公式提交):
=MATCH(4,IF($C:$C=$C,COUNTIFS(B15,A:A,C15,D:D&E:E)>0,1)+IF($F:$F=$C,COUNTIFS(B15,A:A,C15,G:G&H:H)>0,1)+IF($C:$C=$D,COUNTIFS(B15,A:A,D15,D:D&E:E)>0,1)+IF($F:$F=$D,COUNTIFS(B15,A:A,D15,G:G&H:H)>0,1),0)
基本上,对于每一行,您要检查 Motor 和 Age 的每条规则,以确保所有四种情况都为真或不适用。