0

我正在使用这个公式=IF(B24="","",IFERROR(INDEX(Sheet3!$C$3:$EE$3,,MIN(IF(Sheet3!$C$4:$EE$23=(Sheet2!C24&$K$18),COLUMN(Sheet3!$C:$EE)))-2),"NF"))在数组的第一行返回一个单元格值——在这种情况下是一个日期。

搜索条件是唯一项目编号和项目的 2 位状态字母数字代码的组合。该数组由 23 行组成,其中找到了唯一数字的组合,每个数字都有不同的状态代码。

所以本质上,我正在构建一个过滤的项目状态仪表板,它返回链接到相关项目状态的日期。

上面的代码灵感来自 ( LINK ),它使用非常相似的布局,但它使用与邮政编码相关联的城镇郊区,而不是项目编号和状态代码。该公式效果很好(虽然,没有作为数组公式输入),但我在工作表中没有一个公式,我有 3 300 次出现这个公式。

当用户更改过滤器时问题就出现了 - Excel 重新计算整个仪表板并且需要 2 到 5 分钟才能运行。您在设置过滤器后点击了退出按钮并取消了计算,但 Excel 几秒钟后才重新开始计算。之后,Excel 的反应迟缓,几乎无法使用。是的-我们的硬件很弱...

我也尝试了 XLOOKUP,但无法将“lookup_array”设置为数组(Sheet3!$C$4:$EE$23),因为它与“return-array”()不匹配。Sheet3!$C$3:$EE$3将查找数组与&作品连接起来,但是你必须这样做对于所有 23 行,再次将其乘以 3 300。

我想过创建一个UDF,但是每次Excel在过滤后重新计算时仍然会调用该函数...... 3 300调用......

关于如何使 INDEX 版本运行得更快或使 XLOOKUP 接受 lookup_array 以Sheet3!$C$4:$EE$23希望它运行得更快的任何想法?

谢谢!

4

1 回答 1

0

这不是一个优雅的解决方案,但它确实有效。

我将数据集导入到帮助表中,其中我将单元格值与每行的 A 列中的相应值(在本例中为名称)和每列的第 1 行的日期组合在一起,使用下划线作为分隔符。

然后为这个新的数据范围赋予一个唯一的名称,在这种情况下为 EE。

在第二张帮助表上,使用此公式=INDEX(Filtered,1+INT((ROW('Sheet1'!C3)-1)/COLUMNS(Filtered)),MOD(ROW('Sheet1'!C3)-1+COLUMNS(Filtered),COLUMNS(Filtered))+1)并将其向下拖动,直到它返回一个 REF!错误并返回错误前的一行。

这会将所有数据转换为单个 G 列。使用=UNIQUE(SORT(FILTER(B3:B3240,B3:B3240<> "",""))) then 为我提供了 H 列中唯一值的过滤列表,然后我运行

=IF(H3="","",LEFT(H3, SEARCH("_",H3,1)-1))对于 I 中的第一个数据值,以及

=IF(H3="","",MID(H3, SEARCH("_",H3) + 1, SEARCH("_",H3,SEARCH("_",H3)+1) - SEARCH("_",H3) - 1))对于 J 中的中间数据值,以及

=IF(H3="","",IFERROR(TEXT(RIGHT(H3,5),"yyyy-mm-dd"),"NF"))对于 K 中的最后一个数据值。

然后只需跨列 I、J 和 K 运行 XLOOPUP。

运行快速轻松,并解决了我遇到的其他一些问题。

第二个数据集刚刚超过 35 000 行 - 仍然运行良好且快速。

于 2022-01-14T19:20:21.150 回答