分享

SWITCH函数和IF函数的计算速度问题 - Excel函数式编程

 ExcelEasy 2024-04-15 发布于北京


今天我们讨论SWITCH函数IFS函数的问题。

这两个函数的作用是在一些需要很复杂的逻辑的地方,取代IF函数。

从计算效率而言,这两个函数的计算效率要比IF函数差很远。

来看一个简单的IFS公式,

=IFS(    B5=1, MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c)),    B5=0, 100)

我们还是采用上次的巨大数组作为耗时很长的计算实例:

MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c))

根据上次的介绍,在我演示的计算机上,这个计算需要1.6秒左右的时间。

显然,IFS公式的返回值是由B5的值决定的。如果B5 = 1,自然需要进行耗时很长的计算才能返回正确结果。

如果B5 = 0,应该直接返回100。

但是,这个计算却花了1.6秒的时间,

显然,尽管返回值中没有用到这个计算,它却对其进行了计算。

同样,使用SWTICH的公式也是如此,

=SWITCH(    B5,    1, MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c)),    0, 100)

我们当然也可以像LET公式中那样,将耗时很大的计算包装成为一个自定义函数:

=IFS(    B5=1, LAMBDA(MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c))),    B5=0, 100)

当B5 = 0 的时候,这个公式计算速度就很快了,

SWTICH公式同样如此,

但是,这么做不行!

如果B5 = 1,这两个公式都将返回错误值,

这是因为当B5 = 1时,需要返回LAMBDA包装的巨大数据计算,但是这是一个自定义函数,不能直接显示在单元格中。

必须在IFS公式后面加上(),表示这是一个函数调用,

=IFS(    B5=1, LAMBDA(MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c))),    B5=0, 100)()

另外一个SWITCH公式也同样操作,

=SWITCH(    B5,    1, LAMBDA(MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c))),    0, 100)()

但是这样一来,当B5 = 0时又会出错,

因为此时返回的是常量:100,它并不是一个函数。

所以,必须将所有需要返回的结果都包装成自定义函数:

=IFS(    B5=1, LAMBDA(MAKEARRAY(4000, 1000, LAMBDA(r,c, r + c))),    B5=0, LAMBDA(100))()
总结

对于IFS和SWITCH函数而言,如果其中有某个特别耗时的计算,最好的方法就是将所有的选项都包装成一个自定义函数。

要记住,此时IFS公式或SWITCH公式的返回值就变成了一个函数,需要在后面使用()。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章