有人能帮我解决这个问题吗?我试图让这个 Excel 公式起作用,但是,我收到错误提示“您为该函数输入了太多参数”
我是否应该使用不同的 Excel 函数(例如 =IF(AND?
目前的公式如下
=IF(ISBLANK(Q2); IF(TODAY()>R2;"逾期";IF(TODAY()+14>=R2;"两周内到期";"准时"));IF(Q2>R2;"逾期";"准时");IF(TODAY()+14>=R2;"两周内到期";"准时"))IF(Q2>R2;"逾期";"准时"))
我尝试使用这个 IF(AND 公式
=IF(AND(ISBLANK(Q2);IF(TODAY()>R2;"逾期";IF(TODAY()+7>=R2;"一周内到期";"准时"));IF(TODAY()>R2;"逾期";IF(TODAY()+14>=R2;"一周内到期";"准时"));IF(Q2>R2;"逾期";"准时"))
但随后我收到一条错误,指出此公式缺少左括号和右括号
谢谢你!
答案1
让我们一起一步一步地重建您的公式。
获取三行中的一行最简单的方法是使用CHOOSE() 函数
=CHOOSE(<Value 1-3>;"On time";"Due within a week";"Overdue")
现在让我们看看 Q 列中的日期。如果 Q2 中的单元格不包含值,则需要使用当前日期,否则使用此值。这很容易使用IF() 函数
IF(ISBLANK(Q2);TODAY();Q2)
从 R2 的值中减去结果IF()
函数的结果和另一个 1。减一将使比较日期的结果相等(如果 Q2 中的日期与 R2 中的日期完全相等,那么我们将得到-1)。我们将减法的结果除以 7,除以一周的天数,然后取除法的整数部分。此外,我们将整个表达式包装在SIGN() 函数。
因此我们得到-1对于小于或等于 R2 的所有日期,0对于 R2 之后一周内的日期,以及1所有其他日期。
由于该CHOOSE()
函数需要 1 到 3 之间的值,我们将结果加 2。最终公式为:
=CHOOSE(SIGN(INT((R2-IF(ISBLANK(Q2);TODAY();Q2)-1)/7))+2;"On time";"Due within a week";"Overdue")
如您所见,该公式比使用嵌套公式要短一些IF()
答案2
取第一个表达式并分离出函数的所有参数IF()
,它看起来像这样
=IF ( 01 Opening bracket of outermost IF
ISBLANK(Q2); 02 Argument 1
IF ( 03 Argument 2 starts
TODAY()>R2; 04
"Overdue"; 05
IF ( 06
TODAY()+14>=R2; 07
"Due within two weeks"; 08
"On time" 09
) 10
); 11 Argument 2 ends
IF ( 12 Argument 3 starts
Q2>R2; 13
"Overdue"; 14
"On time" 15
); 16 Argument 3 ends
IF ( 17 Argument 4(!) starts
TODAY()+14>=R2; 18
"Due within two weeks"; 19
"On time" 20
) 21 Argument 4 ends
) 22 Closing bracket of outermost IF
23
IF ( 24 No operator joining to lines 01 to 22
Q2>R2; 25
"Overdue"; 26
"On time" 27
) 28
) 29
最外层的IF
,包括它的左括号,位于第 01 行。它应该有 3 个参数 -状况,如果条件为真则为值和如果条件为假则为值。第一个参数位于第 02 行。第二个参数本身是一个IF()
函数,位于第 03 行至第 11 行(含)。第三个参数也是一个IF()
函数,位于第 12 行至第 16 行(含)。
第三个参数应该标记最外层的结束IF
,但事实并非如此。相反,第 17 行到第 21 行(含)尝试将第四个参数添加到最外层IF()
和右括号的末尾。
因此尝试编写一个IF()
带有 4 个参数的函数可以解释错误消息“您为此函数输入了过多参数‘
不幸的是,这不是你的第一个表达式的唯一问题。还有另外两个问题。
首先,第 22 行的右括号后跟IF
第 24 行的第二个最外层括号(我插入了一个空白行作为第 23 行,以强调第一个最外层括号IF
已经结束)。虽然可以有一个包含两个非嵌套函数的公式,但这些函数需要链接在一起,通常使用运算符。
例如
=IF(A1>0;"Positive";"Negative")&IF(B1="Measured";" Reading";" Estimate")
IF()
使用运算符组合两个函数的结果&
。
其次,第 29 行包含不匹配的右括号。
那么你的表情实际上应该是什么样的呢?
看起来您正在尝试比较两个日期:第二个日期在单元格中R2
,第一个日期可能在单元格中Q2
- 尽管如果Q2
是空白单元格,则将其用作TODAY()
第一个日期。除此之外:您希望提供以下结果:
- “逾期”——第一次约会晚于第二次约会
- “两周内到期” - 第一次约会不在第二次约会之后,但第二次约会在第一次约会后 14 天内
- “准时”——否则
有多种方法可以实现这一点:以下是一些主题的变体
方法 1-辅助细胞
S2
使用公式为第一个日期分配一个辅助单元格(例如):=IF(ISBLANK(Q2);TODAY();Q2)
然后使用几个嵌套的IF
's 来比较中的值,R2
并S2
使用公式获得正确的结果=IF(S2>R2;"Overdue";IF(S2+14>=R2;"Due within two weeks";"On time"))
方法 2 - 重复短语
不要使用辅助单元格,而是在更大的公式中重复其公式:
=IF(IF(ISBLANK(Q2);TODAY();Q2)>R2;"Overdue";IF(IF(ISBLANK(Q2);TODAY();Q2)+14>=R2;"Due within two weeks";"On time"))
方法 3 - 使用 LET() 函数定义第一个日期
=LET(firstdate;IF(ISBLANK(Q2);TODAY();Q2);IF(firstdate>R2;"Overdue";IF(firstdate+14>=R2;"Due within 2 weeks";"On time")))
方法 4 - 可能是你最初想要的
=IF(ISBLANK(Q2);IF(TODAY()>R2;"Overdue";IF(TODAY()+14>=R2;"Due within two weeks";"On time"));IF(Q2>R2;"Overdue";IF(Q2+14>=R2;"Due within two weeks";"On time")))
方法 1 很简单,但有时工作表的创建者不喜欢保持简单。方法 2 很笨重,在我看来,在公式中重复短语是一种不好的做法。可以说,方法 3 是微软试图迎合不喜欢方法 1 的非简单主义者,同时避免方法 2 的笨重。要使用方法 3,您需要 Office 365 或 Office 21 版本的 Excel。
方法 4 与方法 2 一样,也存在重复,不过方法 4 中的重复更微妙一些。方法IF()
4 最外层的第二个和第三个参数相同,只是第二个参数使用 ,TODAY()
而第三个参数将其替换为Q2
。
公式中的重复通常不是一个好主意,因为对重复部分的任何更正/修改都必须应用多次。