动态命名范围的实际工作方式

时间:2018-04-10 16:15:07

标签: dynamic excel-formula named-ranges

所以我的问题是关于动态命名范围的功能。我做了一些研究,我所看到的一切似乎都涉及到解决具体问题,但这些都不是我遇到的问题。所以,我要陈述我想做的事情,希望你们中的一个能够帮助我理解为什么我得到了我得到的结果!

我正在尝试使用动态命名范围来创建数据验证列表。我更喜欢这样做无宏,所以我可以为我的同事创建一个更加用户友好的界面,他们不懂电脑。我遇到的问题是,当我使用公式从范围中拉出(在单独的隐藏工作表上),而不是拉动范围内的所有项目时,公式会从同一行中提取一个项目。

例如,如果我在$ J $ 6中有“苹果”作为我的命名范围 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中运行。有什么模式我不见了?我将包括一些我尝试过的其他公式以获取更多信息;我不知道是否有任何帮助,但更多信息是更多信息。

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

提前感谢能够提供一些见解的任何人!我通过网上了解了我所知道的大部分内容,这是我第一次在Excel上提问。干杯!

附加代码

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

我在这个网站上找到了这个公式(我不记得这个帖子,但对程序员来说太遗憾了!)。它搜索关键字 DNR中的每个项目,但将所有内容转换为0或1,我希望它做的是将结果准备为字符串并根据这些结果创建列表。 / p>

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

范围 skillsActive 也扩展了我喜欢的范围,但它不是DNR;它被命名为range,其单元格值是原始字符串。 B2 是使用数据验证的关键字列表。此公式仅返回 skillsActive 的第一次迭代 - 如果B2 =“Blinded”,它将返回 Soldier ,或者对于任何其他结果,它将返回 FALSE

1 个答案:

答案 0 :(得分:1)

使用SEARCH,需要将其视为Array Formula,最好使用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