我确信这个问题的答案非常简单,但我研究了这个公式几个小时,却无法找出错误。本质上,我希望公式执行的操作是,如果 F3 =“Freshman”,则检查 U3 是否为空,遍历 N3 并输入一个值,如果 U3 不为空,则遍历 U3。然后,如果 F3 !=“Freshman”且 V3 为空,则遍历 S3,如果 V3 不为空,则使用 V3。也许有一种不太复杂的方法可以解决这个问题,但我不确定。
=IF(ISBLANK($U3)=TRUE,IF($F3="Freshman",IF(N3>=Lists!$H$7,3,IF(N3>=Lists!$H$6,2.5,IF(N3>=Lists!$H$5,2,IF(N3>=Lists!$H$4,1.5,IF(N3>=Lists!$H$3,1,IF(N3>=Lists!$H$2,0.5,IF(N3>Lists!$H$8,0,""))))))),IF(U3>=Lists!$I$7,3,IF(U3>=Lists!$I$6,2.5,IF(U3>=Lists!$I$5,2,IF(U3>=Lists!$I$4,1.5,IF(U3>=Lists!$I$3,1,IF(U3>=Lists!$I$2,0.5,IF(U3>=Lists!$I$8,"")))))))),IF(ISBLANK($V3)=TRUE,IF(S3>=Lists!$H$7,3,IF((S3>=Lists!$H$6,2.5,IF(S3>=Lists!$H$4,1.5,IF(S3>=Lists!$H$3,1,IF(S3>=Lists!$H$2,0.5,IF(S3>Lists!$H$8,0,"")))))),IF(V3>=Lists!$I$7,3,IF(V3>=Lists!$I$6,2.5,IF(V3>=Lists!$I$5,2,IF(V3>=Lists!$I$4,1.5,IF(V3>=Lists!$I$3,1,IF(V3>=Lists!$I$2,0.5,IF(V3>=Lists!$I$8,0,"")))))))))
我知道有很多嵌套的 if,这可能是我犯错的原因。如果有人能帮忙,我将不胜感激。
答案1
我已将您的公式放入记事本中。然后,对于每个条件,我都开始一个新行,并使用制表符对不同的 IF 函数进行排序。这使您的问题更容易调试。不幸的是,我不知道如何上传文件。我发现最后一个“)”太多了,并且公式中存在一些不一致之处。
例如在第二个清单中,最后一个语句以 S3>=lists$I$8,"") 结尾,而在其他清单中,它以 S3>=lists$I$8,0,"") 结尾。
在第三个列表中,缺少 IF(U3>=Lists!$H$4,2。
如果你愿意,我可以把文件发给你自己看看
答案2
这是编码符号
=IF(ISBLANK($U2)=TRUE, 'if condition #1
IF($F3="Freshman", '#1 true condition
IF(N3>=Lists!$H$7,3,
IF(N3>=Lists!$H$6,2.5,
IF(N3>=Lists!$H$5,2,
IF(N3>=Lists!$H$4,1.5,
IF(N3>=Lists!$H$3,1,
IF(N3>=Lists!$H$2,0.5,
IF(N3>Lists!$H$8,0,"")
)
)
)
)
)
),
IF(S3>=Lists!$I$7,3, '#1 false condition
IF(S3>=Lists!$I$6,2.5,
IF(S3>=Lists!$I$5,2,
IF(S3>=Lists!$I$4,1.5,
IF(S3>=Lists!$I$3,1,
IF(S3>=Lists!$I$2,0.5,
IF(S3>=Lists!$I$8,"")
)
)
)
)
)
)
), 'everything before the comma is one function
IF(ISBLANK($V2)=TRUE, 'new #2 if condition
IF(U3>=Lists!$H$7,3, '#2 true condition
IF((U3>=Lists!$H$6,2.5,
IF(U3>=Lists!$H$4,1.5,
IF(U3>=Lists!$H$3,1,
IF(U3>=Lists!$H$2,0.5,
IF(Lists!$H$8,0,"") 'here is an if without a test condition
)
)
)
)
),
IF(V3>=Lists!$I$7,3, '#2 false condition
IF(V3>=Lists!$I$6,2.5,
IF(V3>=Lists!$I$5,2,
IF(V3>=Lists!$I$4,1.5,
IF(V3>=Lists!$I$3,1,
IF(V3>=Lists!$I$2,0.5,
IF(V3>=Lists!$I$8,0,"")
)
)
)
)
)
)
)
)
)
答案3
这里有一个替代方法:减少嵌套。
我建议使用辅助列,但这不是必需的。使用辅助列时,公式将如下所示:
[N]: {=IFERROR(CHOOSE(LARGE(ROW($H$2:$H$7)*(N3>=$H$2:$H$7),1)-1,0.5,1,1.5,2,2.5,3),IF(N3>=$H$8,0,""))}
[S]: {=IFERROR(CHOOSE(LARGE(ROW($I$2:$I$7)*(S3>=$I$2:$I$7),1)-1,0.5,1,1.5,2,2.5,3),IF(S3>=$I$8,0,""))}
[U]: {=IFERROR(CHOOSE(LARGE(ROW($H$2:$H$7)*(U3>=$H$2:$H$7),1)-1,0.5,1,1.5,2,2.5,3),IF(U3>=$H$8,0,""))}
[V]: {=IFERROR(CHOOSE(LARGE(ROW($I$2:$I$7)*(V3>=$I$2:$I$7),1)-1,0.5,1,1.5,2,2.5,3),IF(V3>=$I$8,0,""))}
=IF(ISBLANK($U3),IF($F3="Freshman",[N],[U],IF(ISBLANK($V3),[S],[V])))
或者,如果您的数据中有空间,我建议添加0.5 to 3 step 0.5
范围内的值J2:J7
。这可能会使维护更容易,因为您可以更改值(如果有需要的话),而无需触及公式。如果你这样做了,公式可以是:
[N]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($H$2:$H$7)*(N3>=$H$2:$H$7),1)-1),IF(N3>=$H$8,0,""))}
[S]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($I$2:$I$7)*(S3>=$I$2:$I$7),1)-1),IF(S3>=$I$8,0,""))}
[U]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($H$2:$H$7)*(U3>=$H$2:$H$7),1)-1),IF(U3>=$H$8,0,""))}
[V]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($I$2:$I$7)*(V3>=$I$2:$I$7),1)-1),IF(V3>=$I$8,0,""))}
=IF(ISBLANK($U3),IF($F3="Freshman",[N],[U],IF(ISBLANK($V3),[S],[V])))
很有可能,这些内容还可以进一步改进。但我希望我至少能给你一个想法。