Excel: Формула выдает ошибку ‘слишком много аргументов’. Что не так с этой формулой?
=ЕСЛИОШИБКА(ИНДЕКС(УТ_Дни_Дополнительных_Типов; ПОИСКПОЗ([@Дата];УТ_Дни_Дополнительных_Типов[Дата];0); ПОИСКПОЗ(“Тип дня (Дополнительный)”;УТ_Дни_дополнительных_типов[#Заголовки];0)); ИНДЕКС(УТ_Основные_Типы_Дней; ПОИСКПОЗ(ДЕНЬНЕД([@Дата];2); УТ_Основные_типы_дней[Номер];0); ПОИСКПОЗ(“Тип дня (Основной)”;УТ_Основные_Типы_Дней[#Заголовки];0)))
Ваша формула содержит синтаксическую ошибку из-за неправильного вложения функции ЕСЛИОШИБКА. Проблема в том, что вы пытаетесь использовать ИНДЕКС с двумя аргументами ПОИСКПОЗ внутри одного аргумента ЕСЛИОШИБКА, что приводит к синтаксическому конфликту.
Contents
- Основная причина ошибки
- Правильная структура формулы
- Исправленная версия формулы
- Альтернативные решения
- Проверка и отладка
Основная причина ошибки
Ошибка “слишком много аргументов” возникает из-за неправильного синтаксиса функции ЕСЛИОШИБКА. Ваша текущая структура:
ЕСЛИОШИБКА(ИНДЕКС(...); ИНДЕКС(...))
Функция ЕСЛИОШИБКА принимает только два аргумента: первый - проверяемое выражение, второй - значение при ошибке. Однако в вашей формуле первая часть содержит вложенные функции, которые могут восприниматься как дополнительный аргумент.
Проблема в том, что ИНДЕКС с двумя ПОИСКПОЗ внутри создает более сложную структуру, чем ожидает функция ЕСЛИОШИБКА.
Правильная структура формулы
Для работы с таблицами в Excel с использованием ИНДЕКС и ПОИСКПОЗ правильная структура должна быть:
ЕСЛИОШИБКА(
ИНДЕКС(диапазон; строка; столбец);
альтернативное_значение
)
В вашем случае нужно полностью обернуть первый ИНДЕКС в аргумент ЕСЛИОШИБКА, а второй ИНДЕКС сделать значением при ошибке.
Исправленная версия формулы
Вот правильная версия вашей формулы:
=ЕСЛИОШИБКА(
ИНДЕКС(
УТ_Дни_Дополнительных_Типов;
ПОИСКПОЗ([@Дата]; УТ_Дни_Дополнительных_Типов[Дата]; 0);
ПОИСКПОЗ("Тип дня (Дополнительный)"; УТ_Дни_дополнительных_типов[#Заголовки]; 0)
);
ИНДЕКС(
УТ_Основные_Типы_Дней;
ПОИСКПОЗ(ДЕНЬНЕД([@Дата]; 2); УТ_Основные_типы_дней[Номер]; 0);
ПОИСКПОЗ("Тип дня (Основной)"; УТ_Основные_Типы_Дней[#Заголовки]; 0)
)
)
Ключевые изменения:
- Правильное форматирование с переносами строк для лучшей читаемости
- Убрано двойное вложение функций
- Сохранена вся логика поиска, но в правильном синтаксисе
Альтернативные решения
Вариант 1: Использование ЕСЛИОШИБКА только для первого ИНДЕКСа
Если вы хотите проверить на ошибку только первую часть, используйте:
=ЕСЛИОШИБКА(
ИНДЕКС(УТ_Дни_Дополнительных_Типов; ПОИСКПОЗ([@Дата]; УТ_Дни_Дополнительных_Типов[Дата]; 0); ПОИСКПОЗ("Тип дня (Дополнительный)"; УТ_Дни_дополнительных_типов[#Заголовки]; 0));
ИНДЕКС(УТ_Основные_Типы_Дней; ПОИСКПОЗ(ДЕНЬНЕД([@Дата]; 2); УТ_Основные_типы_дней[Номер]; 0); ПОИСКПОЗ("Тип дня (Основной)"; УТ_Основные_Типы_Дней[#Заголовки]; 0))
)
Вариант 2: Использование ЕОШИБКА для более сложной логики
=ЕОШИБКА(
ИНДЕКС(УТ_Дни_Дополнительных_Типов; ПОИСКПОЗ([@Дата]; УТ_Дни_Дополнительных_Типов[Дата]; 0); ПОИСКПОЗ("Тип дня (Дополнительный)"; УТ_Дни_дополнительных_типов[#Заголовки]; 0))
; ИНДЕКС(УТ_Основные_Типы_Дней; ПОИСКПОЗ(ДЕНЬНЕД([@Дата]; 2); УТ_Основные_типы_дней[Номер]; 0); ПОИСКПОЗ("Тип дня (Основной)"; УТ_Основные_Типы_Дней[#Заголовки]; 0))
)
Важно: Функция ЕОШИБКА возвращает ЛОЖЬ, если нет ошибки, и ИСТИНА, если есть ошибка. Это позволяет использовать ее в более сложных логических конструкциях.
Проверка и отладка
Шаг 1: Проверка диапазонов
Убедитесь, что все диапазоны корректны:
УТ_Дни_Дополнительных_ТиповиУТ_Основные_Типы_Днейсуществуют- Столбцы
[Дата],"Тип дня (Дополнительный)","Тип дня (Основной)"существуют - Заголовки содержат точные значения
Шаг 2: Пошаговая проверка
-
Проверьте работает ли отдельно первый ИНДЕКС:
excel=ИНДЕКС(УТ_Дни_Дополнительных_Типов; ПОИСКПОЗ([@Дата]; УТ_Дни_Дополнительных_Типов[Дата]; 0); ПОИСКПОЗ("Тип дня (Дополнительный)"; УТ_Дни_дополнительных_типов[#Заголовки]; 0)) -
Проверьте работает ли отдельно второй ИНДЕКС:
excel=ИНДЕКС(УТ_Основные_Типы_Дней; ПОИСКПОЗ(ДЕНЬНЕД([@Дата]; 2); УТ_Основные_типы_дней[Номер]; 0); ПОИСКПОЗ("Тип дня (Основной)"; УТ_Основные_Типы_Дней[#Заголовки]; 0))
Шаг 3: Проверка на пустые значения
Убедитесь, что:
- Дата в
[@Дата]не пустая - Значения для поиска существуют в соответствующих диапазонах
- Нет лишних пробелов в текстовых значениях
Заключение
-
Основная проблема - неправильное синтаксическое использование функции ЕСЛИОШИБКА с вложенными функциями ИНДЕКС и ПОИСКПОЗ.
-
Решение - использовать правильную структуру с полным обертыванием первого ИНДЕКС внутри ЕСЛИОШИБКА, а второй ИНДЕКС сделать альтернативным значением.
-
Рекомендация - всегда используйте форматирование с переносами строк для сложных формул, это помогает избежать синтаксических ошибок и улучшает читаемость.
-
Дополнительная проверка - убедитесь, что все диапазоны и значения для поиска корректны, так как синтаксическая ошибка может маскировать реальные проблемы с данными.
Исправленная формула будет работать корректно, возвращая значение из первой таблицы, если оно найдено, или значение из второй таблицы, если в первой нет соответствия.