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)
是的。
这是数组公式(为了可读性添加了换行符):
= 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是一个返回集合中出现最频繁的数据的函数。不过,有一些注意事项:
数据必须至少出现两次才能由MODE.MULT. 如果没有重复数据,则会返回错误。例如,MODE.MULT({1;2;3})会返回错误,因为数组中没有重复数据{1;2;3}。另一个例子:MODE.MULT({1;1;2}会返回,1因为1在数据中出现最频繁。
如果就出现次数最多的数据而言存在“平局”,MODE.MULT则返回所有平局条目的数组。例如MODE.MULT({1;1;2;2})将返回一个{1;2}.
最重要的是,可能是最奇特但也是最有用的行为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 TRUE,FALSE否则返回。(由于该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要求数据中至少有两个条目匹配才能返回值。