在 Excel 2010 中我使用的公式是:
=_xlfn.IFERROR(INDEX(K$76:K$2044,MATCH(Q23,P$76:P$2044,0),1),INDEX(K$76:K$2044,MATCH(Q23,L$76:L$2044,0),1))
但我需要将其转换为 Excel 2003。我已经弄清楚了:
_xlfn.IFERROR
成为
_IF(ISERROR)
因此在 Excel 2003 中公式现在是:
=IF(ISERROR(INDEX(K$76:K$2044,MATCH(Q23,P$76:P$2044,0),1),INDEX(K$76:K$2044,MATCH(Q23,L$76:L$2044,0),1)))
但是 2003 年的参数太多了,无法处理。有人能帮忙缩短或简化公式吗?
答案1
如果我正确理解了逻辑,您想要:在 P76:2044 中查找 Q23 如果存在,则根据该位置从 K 执行索引,否则根据与 L76:2044 的匹配从 K 执行索引(并相信存在匹配)。
如果正确的话,我会将错误陷阱移至 MATCH 函数,而不是 INDEX,如下所示:
=INDEX(K$76:K$2044,如果(ISERROR(MATCH(Q23,P$76:P$2044,0)),MATCH(Q23,L$76:L$2044,0),MATCH(Q23,P$76:P$2044,0)),1)
(我添加了一些额外的空格,使其稍微清晰一些)。这应该使它更容易调试,并且可能更有效地计算,因为它只进行两次匹配和一个索引,而不是 2 和 2(尽管索引非常有效)。
由于索引的数组是单列,因此可以删除最后的“,1”,尽管我个人喜欢它提供的清晰度,即这肯定是从第一列中提取一个值。
顺便说一句,如果在 L 和 P 中都找不到 Q23,这仍然会中断。也许这在您的数据集中不会发生,但要小心。
答案2
您缺少一个括号来关闭 ISERROR 函数,并且您没有指定在没有错误的情况下您想要的内容。也许重复您的第一次索引查找:-
=IF(ISERROR(INDEX(K$76:K$2044,MATCH(Q23,P$76:P$2044,0),1)),INDEX(K$76:K$2044,MATCH(Q23,L$76:L$2044,0),1)),INDEX(K$76:K$2044,MATCH(Q23,P$76:P$2044,0),1))