Arrays Excel数组:减少计算步骤数

Arrays Excel数组:减少计算步骤数,arrays,excel,Arrays,Excel,根据我正在进行的Excel数组世界之旅,我想知道是否有人能给我一个或两个指针 在随附的excel表中,我目前有一个从隔离查找到无间隙列表的四步过程: 步骤1(黄色):对于工作表“数据”中的50字长列表,执行50个单元格的查找,以查看第1行(红色)中的输入是否出现在相应单元格的某个位置。在这种情况下,对三个不同的输入执行三次查找,即在C-e列中 步骤2(橙色):然后数组重新列出其上方50个单元格查找的内容,但删除所有空单元格(即,与第1行中的输入不匹配的单元格) 步骤3(绿色):步骤2的结果列在一

根据我正在进行的Excel数组世界之旅,我想知道是否有人能给我一个或两个指针

在随附的excel表中,我目前有一个从隔离查找到无间隙列表的四步过程:

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

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

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

步骤4(蓝色):步骤3的结果用与步骤2相同的技术列出,以便删除空白单元格。 总的来说,这允许在字符串中的某个位置包含给定输入的所有数据对象的无间隙列表

然而,我真正的数据对象列表有5000个条目,我想查找100个或更多输入的结果。由于步骤1要求单独查找每个组合,因此仅步骤1就需要500000次计算,这会对处理器造成沉重负担

因此,我想知道是否有人知道我如何缩短这个过程以减少所涉及的单元格/计算的数量。我假设第1步和第2步可以以某种方式合并,但我对数组的了解不足以考虑如何实现这一点

如果有人能就此事提出一些建议,那就太好了

亲切问候,, 抢劫


文件链接:

因为您没有从最终列表中删除重复的条目,所以这非常简单

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

在单元格中
A1

=SUMPRODUCT(0+ISNUMBER(查找(C1:E1,数据!A1:A50)))

在您选择的任何单元格中,要开始返回列表,数组公式**

=IF(行($1:1)>A$1,”,间接(“数据”!”)和文本(小(IF(ISNUMBER(查找(C$1:E$1,数据!A$1:A$50)),10^5*行(数据!A$1:A$50)+列(数据!A$1:A$50)),行($1:1)),“R0C00000 0))

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

注意事项:

关于输入数组公式的说明在这篇文章的底部。 图纸名称(在第二个公式中加粗)应根据需要进行修改。 重要的是,包含要搜索的值的范围(
A1:C1
)和包含要在其中搜索的条目的范围(
A1:A50
)是正交的,即一个是水平范围,另一个是垂直范围。 如果您未使用英语版本的Excel,则第二个公式中的零件
“R0C00000”
可能需要修改。 问候


**数组公式的输入方式与“标准”公式不同。不要只按ENTER键,而是先按住CTRL和SHIFT键,然后再按ENTER键。如果您做得正确,您会注意到Excel在公式周围放了一个大括号{}(尽管您自己不要尝试手动插入这些括号)。

Wowza!太棒了!非常感谢。我将不得不描述这一切,看看发生了什么,因为这是非常强大的东西。目前,我似乎看不出结果的顺序。有没有办法使订单与原始流程相同?i、 e.从左到右沿着柱子往下走?(更新:当前的顺序似乎是跨列逐行排列,而不是逐列排列)您是正确的。它需要更多的工作才能以列方式返回结果,尽管这是可以做到的。关于公式效率和产出偏好的情况,尽管请让我知道。好吧,如果可以做到,而且不会太麻烦,那么我会非常感兴趣。然而,尽管如此,这已经进行了数千次计算,因此,如果这是一个痛苦,也不用担心!:-)如果你想知道的话,我的工作簿上的计算时间现在已经从大约90秒减少到了3-4秒。非常感谢:-)不客气。抱歉,出了点事。当我有机会时,我将尝试发布列式解决方案。