Как на самом деле работают динамические именованные диапазоны
Поэтому мой вопрос касается функциональности динамического именованного диапазона. Я провел некоторое исследование, и все, что я видел, похоже, связано с решением конкретных проблем, ни с одной из которых я не сталкиваюсь. Итак, я собираюсь заявить, что я хотел бы сделать, и, надеюсь, один из вас сможет помочь мне понять, почему я получаю результаты, которые я получаю!
Я пытаюсь использовать динамический именованный диапазон для создания списка для проверки данных. Я бы предпочел сделать это без макросов, чтобы я мог создать более удобный интерфейс для моих коллег, которые не разбираются в компьютерах. У меня есть проблема в том, что когда я использую формулы для извлечения из диапазона (который находится на отдельном скрытом листе), вместо того, чтобы вытягивать все элементы в диапазоне, формула извлекает один элемент из той же строки.
Например, если у меня есть "яблоки" в $J$6 как часть моих названных фруктов диапазона, формула:
`=SEARCH(fruits, "I ate fifteen bananas today.")`
будет компилироваться как
`=SEARCH("apples", "I ate fifteen bananas today.")`
вместо
=SEARCH({"pears";"bananas";"mangos";"grapes";"apricots";"apples";"oranges";"raspberries"}, "I ate fifteen bananas today.")
Я попытался ввести формулу в виде массива, но безрезультатно. Я непоследовательно заставляю свои формулы проходить через каждый элемент в DNR, а не только один, и мне хотелось бы получить некоторые пояснения о том, как они работают в Excel. Есть какой-то шаблон, который я пропускаю? Я собираюсь включить некоторые другие формулы, которые я пробовал для дополнительной информации; Я не знаю, поможет ли это, но больше информации - больше информации.
Я извлекаю их из отдельного рабочего листа, над которым работаю, потому что не хочу публиковать информацию о студентах. Это из игры, которую я разрабатываю, но это та же самая проблема (я фактически использую одну, чтобы помочь построить другую - хи хи).
Заранее спасибо всем, кто может предложить некоторое понимание! Большинство из того, что я знаю, я узнал от вас, ребята, онлайн, и я впервые задаю вопросы в Excel. Ура!
Дополнительный код
`=SUMPRODUCT(--ISNUMBER(SEARCH(keywords, INDEX(skillsActive, MATCH(B3, OFFSET(skillsActive, 0,2),0)))))`
Я нашел эту формулу на этом сайте (однако я не помню ветку, извините программиста!). Он ищет каждый элемент в ключевых словах DNR, но преобразует все в 0 или 1, и я хотел бы подготовить результаты в виде строк и создать список на основе этих результатов.
`{=IF(B2="","",IF(ISERROR(SEARCH(B2,skillsActive))=FALSE, OFFSET(skillsPassive, 0, 1), FALSE))}`
Диапазон skillActive также расширяется, как мне бы хотелось, но это не DNR; это именованный диапазон, значения ячеек которого являются необработанными строками. B2 - это список ключевых слов, использующих проверку данных. Эта формула возвращает только первую итерацию skillActive - она либо возвращает Soldier, если B2="Blinded", либо FALSE для любого другого результата.
1 ответ
С помощью SEARCH
, который должен рассматриваться как формула массива, в идеале с AGGREGATE
, Мы можем использовать SUMPRODUCT
заставить вычисление массива-формулы в нормальной формуле.
=SUMPRODUCT(AGGREGATE(15,6,SEARCH(fruits, "I ate fifteen bananas today."),1))
Разбивая это:
SEARCH(fruits, "I ate fifteen bananas today.")
В пределахSUMPRODUCT
это оценивается как формула массива:SEARCH({"pears";"bananas";"mangos";"grapes";"apricots";"apples";"oranges";"raspberries"}, "I ate fifteen bananas today.")
и становится:{#VALUE!;15;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
AGGREGATE(15,6,{#VALUE!;15;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},1)
Второй аргумент6
поэтому мы отбрасываем все значения ошибок:AGGREGATE(15,6,{15},1)
Первый аргумент15
, поэтому мы считаем от наименьшего к наибольшему, и четвертый аргумент (1
) сообщает нам, какой элемент получить, в данном случае самый маленький:15
=SUMPRODUCT(15)
SUMPRODUCT
в основном просто вынуждает это оценивать как формулу массива. Он умножает соответствующие элементы в каждом аргументе вместе, а затем суммирует результаты:=15