excel 有没有办法让这个公式运行得更快?

mqkwyuun  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个公式,它有很多移动的部分,从非常大的数据集中获取数据。它是如此广泛,它是该死的崩溃我的电脑附近,我没有添加帮助列或编辑源数据的选项,我宁愿不必手动选择使用的单元格,因为它们不断被添加。
有没有一个好的方法,使这个运行更快,我只是错过了?
公式:=IFERROR(TAKE(TAKE(SORT(FILTER('TELEDATA IN PROGRESS (9.22.23)'!E:T,('TELEDATA IN PROGRESS (9.22.23)'!G:G=BI2)*('TELEDATA IN PROGRESS (9.22.23)'!B:B="MOL ")*('TELEDATA IN PROGRESS (9.22.23)'!U:U>0)),16,-1,),1),,1),"")

wb1gzix0

wb1gzix01#

你可以尝试下一个建议。
首先,您可以将2个嵌套的TAKE替换为INDEX,以获得左上角的项(这不是性能影响):

=IFERROR(
    INDEX(
        SORT(
            FILTER('TELEDATA IN PROGRESS (9.22.23)'!E:T,
                ('TELEDATA IN PROGRESS (9.22.23)'!G:G=BI2)*('TELEDATA IN PROGRESS (9.22.23)'!B:B="MOL ")*('TELEDATA IN PROGRESS (9.22.23)'!U:U>0)
            )
            ,16,-1,
        )
        ,1,1
    )
    ,""
)

字符串
其次,考虑到数据源名称,我可以假设你在T列中搜索max number。在这种情况下,你可以使用XLOOKUPMAXIFS函数,而不是IFERRORSORTFILTER组合:

=XLOOKUP(
    MAXIFS(T:T
        ,'TELEDATA IN PROGRESS (9.22.23)'!G:G,"="&BI2
        ,'TELEDATA IN PROGRESS (9.22.23)'!B:B,"=MOL "
        ,'TELEDATA IN PROGRESS (9.22.23)'!U:U,">0"
    )
    ,'TELEDATA IN PROGRESS (9.22.23)'!T:T
    ,'TELEDATA IN PROGRESS (9.22.23)'!E:E
    ,""
)


FILTERSORT创建了中间数组,从而降低了性能。SORT在最好的情况下执行时间为O(n*log(n)),而MAXMINXLOOKUP(在最差的情况下)每个都是O(n),总共是O(2n)。

当然,您需要限制范围(不要引用整个列)。

相关问题