Excel如何返回满足一定条件的数组?

Ima*_*889 3 arrays excel excel-formula

如果我的单元格范围内有数据A1:A6

Apple
Banana
Cherry
Grape
Orange
Watermelon
Run Code Online (Sandbox Code Playgroud)

有没有办法返回一个数组(在单个单元格中,用于较大公式的中间步骤),该数组返回上述数组,除了那些满足特定条件的条目之外?

例如,如果我想要一个公式返回仅包含包含字母 的单元格的数组n,它将返回:

Banana
Orange
Watermelon
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?

注意我不想返回相同大小的数组,只有空白条目,即我不想:

""
Banana
""
""
Orange
Watermelon
Run Code Online (Sandbox Code Playgroud)

Ima*_*889 5

是的。

这是数组公式(为了可读性添加了换行符):

= INDEX(A1:A6,N(IF({1},MODE.MULT(IF(ISNUMBER(SEARCH("n",A1:A6)),
  (ROW(A1:A6)-ROW(A1)+1)*{1,1})))))
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个数组公式,这意味着您必须在输入公式后按Ctrl+ Shift+而不是仅按。EnterEnter


这个公式有一些特别奇怪的事情,所以我想如果你感兴趣的话我会解释下面的内容。我在下面解释的一些内容可能是显而易见的,但我只是说得很彻底。

要从基于单个索引的列表返回结果,请使用以下命令:

= INDEX(A1:A6,2)
Run Code Online (Sandbox Code Playgroud)

这样就可以返回了Banana

要从基于多个索引的列表返回结果,您可能会考虑使用如下内容:

= INDEX(A1:A6,{2;5;6})
Run Code Online (Sandbox Code Playgroud)

理想情况下这会返回{Banana;Orange;Watermelon}

但是,这不会返回数组。根据我最近提出的一个问题,给出了解决这个问题的一个非常聪明的解决方法:

= INDEX(A1:A6,N(IF({1},{2;5;6})))
Run Code Online (Sandbox Code Playgroud)

这将返回所需的结果{Banana;Orange;Watermelon}

我认为这是解释的第 1 部分。


解释的第 2 部分是以下返回的方式{2;5;6}

= MODE.MULT(IF(ISNUMBER(SEARCH("n",A1:A6)),(ROW(A1:A6)-ROW(A1)+1)*{1,1}))
Run Code Online (Sandbox Code Playgroud)

MODE.MULT是一个返回集合中出现最频繁的数据的函数。不过,有一些注意事项:

  1. 数据必须至少出现两次才能由MODE.MULT. 如果没有重复数据,则会返回错误。例如,MODE.MULT({1;2;3})会返回错误,因为数组中没有重复数据{1;2;3}。另一个例子:MODE.MULT({1;1;2}会返回,1因为1在数据中出现最频繁。

  2. 如果就出现次数最多的数据而言存在“平局”,MODE.MULT则返回所有平局条目的数组。例如MODE.MULT({1;1;2;2})将返回一个{1;2}.

  3. 最重要的是,可能是最奇特但也是最有用的行为MODE.MULT,在确定数据模式时MODE.MULT 完全忽略逻辑值(TRUE和值),即使它们比数据中的非逻辑值出现得更频繁。FALSE

我们可以利用 的这些属性MODE.MULT来获取所需的数组。

ISNUMBER(SEARCH("n",A1:A6))返回一个值数组TRUE/FALSE,其中数据包含n. 像这样的东西:

FALSE
TRUE
FALSE
FALSE
TRUE
TRUE
Run Code Online (Sandbox Code Playgroud)

(ROW(A1:A6)-ROW(A1)+1)返回一个从 1 开始1并增加 1 的数组,无论原始数组有多大:

1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

(ROW(A1:A6)-ROW(A1)+1)*{1,1}实际上只是复制此列:

1  1
2  2
3  3
4  4
5  5
6  6
Run Code Online (Sandbox Code Playgroud)

IF语句用于返回上面数组中的数字 if TRUEFALSE否则返回。(由于该IF语句不包含“else”子句,FALSE因此是给定的默认值。)

在此示例中,该IF语句将返回:

FALSE  FALSE
2      2
FALSE  FALSE
FALSE  FALSE
5      5
6      6
Run Code Online (Sandbox Code Playgroud)

采用MODE.MULT上述公式将返回,{2;5;6}因为如上所述,在考虑模式时MODE.MULT可以方便地忽略上面数组中的值。FALSE

有必要考虑上面的数组内部,MODE.MULT而不是简单地:

FALSE
2
FALSE
FALSE
5
6
Run Code Online (Sandbox Code Playgroud)

因为如前所述,MODE.MULT要求数据中至少有两个条目匹配才能返回值。

  • @Tom - 看起来这是一个准备好的问题,或者是 OP 试图为社区回答的问题?(大约在同一分钟询问和回答,所以我认为这是一个人为的问题/答案?) (2认同)