|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
基本上都说到了吧,再补充一点。
用这里的说法,对于if还有choose的“驱动参数”,如果是一个含有区域引用的表达式,其行为可能不受外层函数的数组要求所影响
比如说,普通公式=SUMPRODUCT(IF(A1:A3,{1;2;3},{10,20}))
对于大多数内置函数来说,外层SUMPRODUCT明确要求数组参数,即使整个公式没有以数组形式输入,仍然会按照数组方式去解释,但是这条对于if和choose行不通,不会强制驱动参数以数组方式解释,这里的A1:A3仍然采用绝对交集原则
假如A1=TRUE; A2=FALSE, A3=#N/A,则上面的公式写在第一行得到6写在第二行得到30写在第三行得到#N/A写在其它行得到#VALUE!.,当然如果是数组公式,结果自然是#N/A
if还有choose的第一参数,不受外层的数组要求影响,对于其中区域引用参数的解释按默认方式进行。如果计算结果不是数组,那么就直接把后面所对应的表达式结果传递给外层参数,这里的表达式结果可能为任意类型,包括引用、三维引用、联合引用、引用数组等特殊的数据结构,能否处理、如何处理完全看外层函数的能力。并且此时是破坏数组的,如果外围环境不是明确要求数组,也不是直接作sum这种包罗万象的参数的话,只取数组首元素,简单例子:=SUM(0+IF(,,{10,20})) 结果是10
而如果if的第一参数运算结果是数组,这时候一定会进行三个参数的数组协调操作,不可能返回三维引用、联合引用这些数据结构,返回的必然是数值、文本、逻辑值、错误值构成的数组。
有一个例外,如果if公式写在一个名称中,第一参数即使是{1,0}这样的明确数组,但是调用的时候没有用数组公式、外层没有数组要求、也不是直接作sum这类函数的参数,会导致取数组首元素运算,而不是数组式的运算
比如,名称a=IF({1;0},{10;20},{100,1})
普通公式 =SUM(0+a) 结果是10 |
|