动态命名范围的实际工作原理

How dynamic named ranges actually work

所以我的问题是关于动态命名范围的功能。我做了一些研究,我所看到的一切似乎都涉及解决特定问题,其中 none 是我遇到的问题。所以,我要说明我想做什么,希望你们中的一位能够帮助我理解为什么我会得到我得到的结果!

我正在尝试使用动态命名范围创建数据验证列表。我宁愿不使用宏,这样我就可以为不懂计算机的同事创建一个更加用户友好的界面。我遇到的问题是,当我使用公式从范围中拉出时(在一个单独的隐藏 sheet 上),而不是拉出范围内的所有项目,公式从同一行中拉出一个项目。

例如,如果我在 $J$6 中有 "apples" 作为我的命名范围 fruits 的一部分,则公式:

`=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 中的作用。我缺少某种模式吗?我将包括一些我尝试过的其他公式以获取更多信息;我不知道是否有任何帮助,但更多信息就是更多信息。

我从一个单独的工作中提取这些sheet 我正在研究因为我不想 post 学生信息。这是我正在设计的一款游戏,但它是完全相同的问题(我实际上正在使用一个来帮助构建另一个 - 嘻嘻)。

提前感谢任何可以提供一些见解的人!我所知道的大部分知识都是通过你们在线学习的,这是我第一次在 Excel 上提问。干杯!

附加代码

    `=SUMPRODUCT(--ISNUMBER(SEARCH(keywords, INDEX(skillsActive, MATCH(B3, OFFSET(skillsActive, 0,2),0)))))`

我在这个网站上找到了这个公式(我不记得线程了,但是对程序员来说很抱歉!)。它搜索 keywords DNR 中的每个项目,但将所有内容都转换为 0 或 1,我希望它做的是将结果准备为字符串并基于这些创建一个列表结果。

    `{=IF(B2="","",IF(ISERROR(SEARCH(B2,skillsActive))=FALSE, OFFSET(skillsPassive, 0, 1), FALSE))}`

范围 skillsActive 也扩展了我想要的方式,但它不是 DNR;它被命名为范围,其单元格值为原始字符串。 B2 是使用数据验证的 关键字 的列表。此公式仅 returns skillsActive 的第一次迭代 - 如果 B2=[=56,它将 return Soldier =],或 FALSE 任何其他结果。

使用SEARCH, that would need to be treated as an Array Formula, ideally with an AGGREGATE. We can use SUMPRODUCT 强制Array-formula 以普通公式计算。

=SUMPRODUCT(AGGREGATE(15,6,SEARCH(fruits, "I ate fifteen bananas today."),1))

分解:

SEARCH(fruits, "I ate fifteen bananas today.")
Within a SUMPRODUCT, this evaluates as an Array formula: SEARCH({"pears";"bananas";"mangos";"grapes";"apricots";"apples";"oranges";"raspberries"}, "I ate fifteen bananas today.")
and becomes:
{#VALUE!;15;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

AGGREGATE(15,6,{#VALUE!;15;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!},1)
The second Argument is 6, so we discard all error values:
AGGREGATE(15,6,{15},1)
The first argument is 15, so we count from the smallest to the largest, and the fourth argument (1) tells us which element to retrieve, in this case the smallest:
15

=SUMPRODUCT(15)
The SUMPRODUCT mostly just forces this to evaluate as an array formula. It multiplies the corresponding elements in each argument together, then sums the results:
=15