ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 94509|回复: 157

[函数讨论系列5] 何谓数组公式[已结],何谓数组运算[继续讨论]?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-5-9 00:24 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:数组公式

原题:SUMPRODUCT与SUM()的区别有哪些;

在使用SUMPRODUCT()时发现它与SUM()的数组还是有一些区别的.不知大家对此有无研究.

它们的区别倒底有哪些呢?希望大家都试试.谈谈自己的看法和理解.谢谢参与!!!

——apolloh注:

引出议题:何谓数组公式?

观点一:

数组公式{}这一方式存在的意义就在于它是用来通知Excel这个公式被要求执行的是多重计算,并告诉Excel有哪些单元格参与这个计算并用来返回结果,不论公式本身是否执行了数组运算(注意多重计算和数组运算的概念有差异)。而其他不是数组公式{}输入的数组运算和非数组运算式,则不需要让Excel先去执行这样的判断,Excel只要按照函数内部既定的方式去执行公式就行。所以数组公式和数组运算应该是两个概念,不是所有数组运算都是数组公式,也不是所有数组公式都是数组运算。

观点二:

数组公式这一说法就等价于含有数组运算(这个概念和多重计算不同)的公式,不论其的书写形式。

在Excel帮助定义及VBA中单元格HasArray属性都指向了前者;而我们一直以来传统的认知是后者,当然包括偶本人之前的认知。讨论异常激烈,有兴趣你也可以发表一下你的观点,不一定要分出谁对谁错,重在参与:)

这个问题,不再讨论了,大家基本意见已经是同意观点一了,如还有不明白请看完1到88楼的所有帖子。

另,可在此基础上,大家可以继续讨论什么是“数组运算”,其都有哪些类型呢?

补充一个简单的例子支持观点一: 相关帖子: http://club.excelhome.net/dispbbs.asp?boardID=3&ID=158150&page=1
[此贴子已经被apolloh于2006-3-27 10:26:12编辑过]

[函数讨论系列5] 何谓数组公式[已结],何谓数组运算[继续讨论]?

[函数讨论系列5] 何谓数组公式[已结],何谓数组运算[继续讨论]?

TA的精华主题

TA的得分主题

发表于 2005-5-9 00:37 | 显示全部楼层
先来一个最明显的,在帮助中有:SUMPRODUCT(A2:B4, C2:D4)与以数组形式输入的公式 SUM(A2:B4*C2:D4) 的计算结果相同。但使用数组公式比SUMPRODUCT 函数的计算提供更通用的解法。例如,使用公式 =SUM(A2:B4^2) 并按 Ctrl+Shift+Enter 可以计算 A2:B4 中所有元素的平方和。

TA的精华主题

TA的得分主题

发表于 2005-5-9 00:48 | 显示全部楼层

我想这个讨论还应加入一个组合:数组公式SUM(IF()) ,因为数组公式SUM(IF()) 大多可简写为数组公式SUM()或用SUMPRODUCT()公式代替。

近期发现数组公式SUM(IF()) 能解决当数组中有错误元素时SUM()或SUMPRODUCT()运算时出错的问题,如下贴:

http://club.excelhome.net/dispbb ... p;skin=0&page=1

TA的精华主题

TA的得分主题

发表于 2005-5-9 01:34 | 显示全部楼层

其实在原来的帖子中都有提到过: 1、Sumproduct()的特点是:可以忽略单元格引用(常量数组)中的非数值型数据; 2、Sumproduct()的最大的缺点是:用逗号分隔来运算时必须要求数组维数相同,如2楼朋友提出的“SUMPRODUCT(A2:B4,C2:D4)”,如果你试图运算:=SUMPRODUCT(A2:B4,C2:C4),那么只能返回错误,这时用Sum(A2:B4*C2:C4)或Sumproduct(A2:B4*C2:C4)就可以直接运算了(将多个数组运算转换成单个数组)。这也是原来的帖子中提醒过大家注意的。

另外:又如这样一个例子:=Sum(if(A1:C10="A",B1:D10)*E1:E10),在这个例子中,显然B1:D10中可能含有文本,所以不能直接相乘,必须用IF加以判断,在这样的核心表达式不修改的情况下,不管你是用Sum还是用Sumproduct来外套,都必须用三键来结束的;但是当我们合理地运用一下Sumproduct的优势,公式稍修改也可回车结束的。 修改如下:=Sumproduct((A1:C10="A")*E1:E10,B1:D10)

大致写这些,大家可以共同探讨。

TA的精华主题

TA的得分主题

发表于 2005-5-9 08:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

关于使用三键Ctrl+Shift+Enter问题:

一些函数在不以三键结束的情况下就支持数组参数了,比如sumproduct,max,min,n,t,sumif等等,但有个前提,就是参数中没有嵌套不能直接支持数组参数并返回数组结果的函数,如if就是比较典型的例子,if的]第一个条件参数中如果使用数组参数,必须要用三键结束。也就是说,如果一个函数嵌套了使用了数组参数的如if的函数作为参数,那么不管它本身能不能直接支持数组参数,整个公式必须用三键Ctrl+Shift+Enter结束。

另,那些不以三键结束的公式,就算使用了数组参数,也不应该看作是数组公式。

[此贴子已经被作者于2005-5-11 12:51:44编辑过]

TA的精华主题

TA的得分主题

发表于 2005-5-9 09:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用apolloh在2005-5-9 8:53:00的发言:

另,那些不以三键结束的公式,就算使用了数组参数,也不应该看作是数组公式。

偶觉得也应该算数组公式。

TA的精华主题

TA的得分主题

发表于 2005-5-9 09:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

如果这样,是否可以说,数组公式必须具备一个特征,就是,一定执行了多重计算。

{=A1} 不能算数组公式,没有多重计算

=Min(A1:A10,B1 :B10) 不能算数组公式,虽然为多组数组参数,但只执行了一次计算

=SUMIF(A1:A10,{"A","B"},B1) 则是数组公式,虽然不用三键结束,但却执行了多重计算,所以是数组公式。

[此贴子已经被作者于2005-5-9 14:34:59编辑过]

TA的精华主题

TA的得分主题

发表于 2005-5-9 10:02 | 显示全部楼层

数组公式 (数组公式:数组公式对一组或多组值执行多重计算,并返回一个或多个结果。数组公式括于大括号 ({ }) 中。按 Ctrl+Shift+Enter 可以输入数组公式。)

我的excel中关于数组公式的解释,按此解释,你的三个例子应该是这样的。

TA的精华主题

TA的得分主题

发表于 2005-5-9 12:03 | 显示全部楼层
以下是引用apolloh在2005-5-9 8:53:00的发言:

关于使用三键Ctrl+Shift+Enter问题:

一些函数在不以三键结束的情况下就支持数组参数了,比如sumproduct,max,min,n,t,sumif等等,但有个前提,就是参数中没有嵌套不能直接支持数组参数并返回数组结果的函数,如if就是比较典型的例子,if如果使用数组参数,必须要用三键结束。也就是说,如果一个函数嵌套了使用了数组参数的如if的函数作为参数,那么不管它本身能不能直接支持数组参数,整个公式必须用三键Ctrl+Shift+Enter结束。

另,那些不以三键结束的公式,就算使用了数组参数,也不应该看作是数组公式。

不能以是否按三键输入作为判别数组公式的条件,要看公式中的运算是否涉及数组运算。 很多函数支持单元格区域引用(多于一个单元格的连续区域)作为参数,以这样的引用作参数时这些函数不涉及数组计算,要区分引用和数组的区别(尽管用数组公式的方式输入时结果是一样的)。 如=MAX(A1:A10)可以直接输入 {=MAX(A1:A10*1)}必须以数组公式的方式输入,因为参数已不是引用而是数组计算, 同理=MAX(IF(C1,A1:A10,B1:B10))可以直接输入,因为IF支持引用作为参数并返回引用,公式没有涉及数组运算。

TA的精华主题

TA的得分主题

发表于 2005-5-9 12:32 | 显示全部楼层
必须让excel知道A1:A10*1 本身已经是执行数组运算了,所以嵌套在max里,整个公式就需要用三键结束了。
[此贴子已经被作者于2005-5-9 17:23:07编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 23:59 , Processed in 0.043567 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表