这两个函数的作用是在一些需要很复杂的逻辑的地方,取代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公式的返回值就变成了一个函数,需要在后面使用()。 |
|