根据我在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
答案 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
内)搜索的条目的范围是正交的,即一个是水平范围,其他垂直范围。"R0C00000"
部分可能需要修改。此致
**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(虽然不要尝试自己手动插入这些)。