楼主 donghan |
上面的数据区域已经定义为DATA 如果我们想求名称DATA中“>0"且"<6"的数值的和,2007中我们可以用新函数SUNIFS组成非数组公式: =SUMIFS(DATA,DATA,">0",DATA,"<5") 或者用与以前版本兼容的数组公式: {=SUM((DATA>0)*(DATA<5)*DATA)} 但是如果想用AND函数连接两个条件却不能计算出正确结果,如数组公式: {=SUM(IF(AND(DATA>0,DATA<5),DATA))} 以上公式符合AND函数的书写逻辑,但是返回的结果是错误的。 为什么呢?因为按我们的预想,AND函数应该返回的结果是: {TURE,TURE,FALSE;TURE,FALSE,FALSE;FALSE,TURE,TURE} 而实际上AND又对上述结果进行了计算,得到最后唯一的结果FALSE,从而使最终结果为0. 同理OR函数也有这样的函数特性,即无论是什么样的参数,其最终结果只能返回1个值,而不能返回数组结果,在这里我称之为结果”唯一函数“。 像SUM、MAX、MIN等很多函数都是这样的函数,如果想返回数组结果,这些唯一函数是不可用的,否则就会得出错误结果。 再举例如:定义{1010,2060,3033;1003,2100,3015;1050,2005,3001;1020,2040,3020;1015,2000,3007}数组为DATA2,求DATA2中每列的最大值之和。 用数组公式{=SUM(--RIGHT(SMALL(COLUMN(A:C)*1000+DATA2,ROW(1:3)*5),3))}可得出结果为183, 但是如果用SUM联合MAX是得不出正确结果的。 数组公式中逻辑函数的非逻辑行为.rar |
2楼 gouweicao78 |
讲解基本点到要害,不过有些问题表述不妥。 参考:公式中的*号、+号是“且”、“或”的意思吗 http://www.exceltip.net/thread-281-1-1.html 修改意见如下: 1、“唯一函数”之名恐不妥,容易联想为“唯一值”、“不重复值” 2、此处AND函数仍然是逻辑函数,执行的仍然是正确的“逻辑行为”,楼主所言的,是数组公式中需要返回单值、数组的区别,而不是AND是否存在“非逻辑行为”。 3、公式:=SUM(--RIGHT(SMALL(COLUMN(A:C)*1000+DATA2,ROW(1:3)*5),3))存在笔误: 举例的DATA2是4位数,为何仅*1000和取右边3位数? 4、“如果用SUM联合MAX是得不出正确结果的”,这句话应该有个错误的例子作为参照,否则是很不严谨的,比如使用下面公式可以得到正确结果:
|