В 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
Если я правильно понимаю логику, вам нужно: найти Q23 в P76:2044; если он там есть, создать индекс из K на основе этой позиции; в противном случае создать индекс из K на основе соответствия L76:2044 (и верить, что соответствие существует).
Если это так, то я бы переместил ловушку ошибок в функцию ПОИСКПОЗ, а не в ИНДЕКС, вот так:
=ИНДЕКС(K$76:K$2044, ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(Q23,P$76:P$2044,0)), ПОИСКПОЗ(Q23,L$76:L$2044,0), ПОИСКПОЗ(Q23,P$76:P$2044,0)) ,1)
(Я добавил несколько дополнительных пробелов, чтобы сделать его немного понятнее.) Это должно упростить отладку и, вероятно, сделать вычисления более эффективными, поскольку он делает только два совпадения и один индекс, а не 2 и 2 (хотя индекс довольно эффективен).
Поскольку массив для индекса представляет собой один столбец, можно опустить последний символ «,1», хотя лично мне нравится ясность, которую он обеспечивает: это определенно извлекает значение из первого столбца.
Кстати, это все равно не сработает, если Q23 не будет найден ни в L, ни в P. Возможно, в вашем наборе данных этого не произойдет, но будьте осторожны.
решение2
Вы пропустили скобку, чтобы закрыть функцию ISERROR, и вы не указали, что хотите, если нет ошибки. Возможно, повторение вашего первого поиска индекса:-
=ЕСЛИ(ЕОШИБКА(ИНДЕКС(K$76:K$2044,ПОИСКПОЗ(Q23,P$76:P$2044,0),1)),ИНДЕКС(K$76:K$2044,ПОИСКПОЗ(Q23,L$76:L$2044,0),1)),ИНДЕКС(K$76:K$2044,ПОИСКПОЗ(Q23,P$76:P$2044,0),1))