Excel数组:减少计算步数

时间:2018-05-14 13:06:58

标签: arrays excel

根据我在Excel数组世界中的持续旅程,我想知道是否有人可以给我一两个指针。

在附加的excel表格中,我目前有四个步骤从隔离查找到无间隙列表:

步骤1(黄色):对于表'数据'中的50字长列表,执行50单元查找以查看第1行(红色)中的输入是否出现在相应单元格中的某处。在这种情况下,对于三个不同的输入,即在列C-E中执行查找三次。

步骤2(橙色):数组然后重新放置其上方50个单元格查找的内容,但删除所有空单元格(即第1行中与输入不匹配的位置)

步骤3(绿色):步骤2的结果列在一列中。

步骤4(蓝色):使用与步骤2中相同的技术列出步骤3的结果,以除去空白细胞。

总的来说,这可以实现所有数据对象的无间隙列表,其中包含字符串中某处的给定输入。

但是,我真正的数据对象列表是5000个条目长,我想查找100个或更多输入的结果。由于步骤1要求单独查找每个组合,因此仅需要对步骤1进行500,000次计算,这会对处理器造成严重影响。

因此,我想知道是否有人知道如何缩短这个过程以减少所涉及的细胞数/计算量。我假设步骤1和2可能以某种方式合并,但我对数组的了解不足以想到如何做到这一点。

很高兴听到有人就此事提出一些建议!

亲切的问候, 罗布

文件链接:https://drive.google.com/open?id=10O91QDD78RkbWtQx2iWfax17Dt5TPw1G

1 个答案:

答案 0 :(得分:0)

由于您没有从最终列表中删除重复的条目,因此这非常简单。

根据您提供的工作簿,在查找表单中输入:

在单元格A1中:

=SUMPRODUCT(0+ISNUMBER(FIND(C1:E1,Data!A1:A50)))

在您选择的任何单元格中,要开始退货清单,数组公式**

=IF(ROWS($1:1)>A$1,"",INDIRECT("'Data'!"&TEXT(SMALL(IF(ISNUMBER(FIND(C$1:E$1,Data!A$1:A$50)),10^5*ROW(Data!A$1:A$50)+COLUMN(Data!A$1:A$50)),ROWS($1:1)),"R0C00000"),0))

并向下复制,直到你开始得到结果的空白。

备注:

    输入数组公式的说明在本文的后面。
    表格名称(在第二个公式中加以说明)应根据需要进行修改。
    重要的是,包含要搜索的值(此处为A1:C1)和包含要在(A1:A50内)搜索的条目的范围是正交的,即一个是水平范围,其他垂直范围。
    如果您没有使用英语版的Excel,则第二个公式中的"R0C00000"部分可能需要修改。

此致

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。