例如,
假设一个单元格的值是:
IF(ISNA(VLOOKUP(A3,somesheet!G:J,3,FALSE) * VLOOKUP(A3,someothersheet!A:D,4,FALSE)), 0, VLOOKUP(A3,somesheet!G:J,3,FALSE) * VLOOKUP(A3,someothersheet!A:D,4,FALSE))
这里,我想要两个 VLOOKUP 的乘积。但有些行可能不存在,所以它可能会返回 NA。如果返回 NA,则只需在此单元格中输入零,否则我想要乘积。
你必须将整个表达式写两次,这似乎很愚蠢。有没有捷径可以让我这样说“进行这个计算,如果返回一个值,则使用该值,否则使用某个默认值?”
答案1
如果你有 Excel 2007 或更高版本,你可以使用 IFERROR 函数来避免重复
=IFERROR(VLOOKUP(A3,somesheet!G:J,3,FALSE)*VLOOKUP(A3,someothersheet!A:D,4,FALSE),0)
或者您可以使用早期版本中类似的解决方法
=LOOKUP(9.9E+307,IF({1,0},0,VLOOKUP(A3,somesheet!G:J,3,FALSE)*VLOOKUP(A3,someothersheet!A:D,4,FALSE)))
答案2
如果您检查第一个查找值是否为 NA,然后检查第二个查找值,如果它们都有效则将它们相乘,这对您来说可能更有意义。
=IF(OR(ISNA(VLOOKUP(A3,somesheet!G:J,3,FALSE)),ISNA(VLOOKUP(A3,somesheet!A:D,4,FALSE))), 0, VLOOKUP(A3,somesheet!G:J,3,FALSE) * VLOOKUP(A3,somesheet!A:D,4,FALSE))
这增加了更多的复杂性,但可能不会冒犯程序员敏感的情感。;-)
答案3
为了消除表达式的重复,您可以使用LET
Excel 中的函数。OP 的公式将是
LET(val, VLOOKUP(A3,somesheet!G:J,3,FALSE) * VLOOKUP(A3,someothersheet!A:D,4,FALSE), IF(ISNA(val), 0, val))
我意识到在发布时 OP 可能还没有这个解决方案。对于以后搜索此主题的任何人,您可以在任何条件下使用它,而不仅仅是ISNA
and ISERROR
。