ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-5-9 12:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组公式

其实我的理解是:单元格引用参与运算,与数组参与运算还是有区别的,只要是参与的数据进行了数组运算,那么就应该看成是数组公式。

其实象Sumproduct、Lookup这样的函数,虽然我们不用三键结束,是因为这样的函数本身支持数组运算,就算我们直接用引用,但实际上函数也是进行数组运算的:如: =SUMPRODUCT(A1:C1,A2:C2) 与 =SUMPRODUCT(A1:C1*1,A2:C2) 同样通过单键结束也正常计算的,所以我们还是将其看作为“数组公式”。

又如:Product函数,如果直接用:=PRODUCT(A1:C1,A2:C2)直接结束是可以正常计算的,但一旦修改为:=PRODUCT(A1:C1,A2:C2*1),则必须用数组公式来结束才能正常计算,这也就表明Product函数只支持单元格引用,如果要在内部转换进行数组运算,就必须用三键结束。

再看一个实例,如:=SUMPRODUCT(A1:C1,TRANSPOSE(D1:D3)),象这个公式也是必须使用数组公式结束,虽然Sumproduct支持内部数组运算,但是Transpose()并不支持,所以必须通过数组公式运算后方可交给Sumproduct来再运算。

最后再看这两个实例: =Sumif(A1:A3,{"A";"B";"C"},C1:C3) 和 =Sumif(A1:A3,B1:B3,C1:C3) 前者大家都用过,是可以直接单键结束生成内存数组的;但后者则不同,如果单键结束,系统只会默认以B1:B3区域中的左上角单元格(B1)进行计算,结果只能返回B1的条件求和;(特此更正:如果使用单键结束编辑,那么系统只能采用B1:B3相对于公式单元格的隐含交叉引用来进行计算!) 为什么呢?虽然Sumif()支持数组运算,但前者的条件本身就是常量数组,那么Sumif()直接运算得出结果{#;#;#},而后者则不同,如果需要生成前者的内存数组,就必须用三键结束来强制将B1:B3的引用转换成数组再进行条件求和才行。

所以,通过以上的实例我们可以看出单元格和数组运算的一些大致关系,这点也是对于学习数组公式的初学者难于理解的。

[此贴子已经被作者于2005-5-18 0:03:16编辑过]

TA的精华主题

TA的得分主题

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

讨论的非常之精彩.谢谢!!!

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用yigepure在2005-5-9 13:10:00的发言:

讨论的非常之精彩.谢谢!!!

呵呵~~~楼主自己不参与吗?只不过好象有点跑题了!

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

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:27 | 显示全部楼层
以下是引用gdliyy在2005-5-9 13:25:00的发言: >

呵呵~~~楼主自己不参与吗?

楼主是裁判

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:47 | 显示全部楼层

需不需用三键就在于,EXCEL是否需要一个提示让你告诉它,你输入的是数组公式。

规则一

对于使用支持数组参数的函数和参数为常量数组的函数都不需要我们特别告诉Excel,hello!这是数组公式,因为Excel自己会做处理,它们内部运行的就是多重计算。

规则二

当你输入的公式需要数组运算,而Excel无法判断其运算的形式(单一计算,多重计算),这时需要用到数组公式的三键。

规则三

如果支持数组参数的函数中还嵌套了其他不直接支持数组参数(当然不包含常量数组,那个符合规则一)的函数,那么就需要执行规则二。如{=SUM(SUMIF(A1:A3,B1:B3,C1:C3))}

规则四

不论是支持数组参数的函数还是参数中包含了常量数组的函数,如果要在多个单元格返回多个结果则必须以数组公式的形式三键结束。

补充一点没有执行数组运算的公式,需要在多个单元格返回结果,如B2:B10 输入{=A1},那么也需要用数组公式的形式三键结束。从这里也可从另一个角度看到 数组公式<>数组运算

[此贴子已经被作者于2005-5-11 10:58:58编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-9 13:49 | 显示全部楼层
以下是引用gdliyy在2005-5-9 13:25:00的发言: >

呵呵~~~楼主自己不参与吗?只不过好象有点跑题了!

此问题起因GVWTN兄的那个测试题里的SUM(IF()),我发现使用SUMPRODUCT()却不行.

所以才引发我的这个问题.同时在使用中还有MATCH(),TRANSPOSE()等运用中发现.还是要用数组方式结束.所以我想是否与它的里面嵌套的函数有关.所以才发了这个帖希望大家能对它讨论一下.发现大家对此研究之深,着实让人佩服.而且详述非常之细.谢谢!本想发表一下.想了半天,发现写不出什么来.所以只能谢谢大家的参与.再次感谢!!!

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:50 | 显示全部楼层
我不赞同apolloh说的,按三键结束才算数组公式,主要是看他内部的计算是否使用数组,如sum(countif(data,{,}))虽然不用三键结束,但其内部进行了数组运算(常量数组),应该也算数组公式,而sumproduct()虽然平时大都不用三键结束,但如果其内部进行数组运算,也要算数组公式,用sumproduct()代替sum()数组公式,只是省却按三键结束的麻烦,并没有改变公式的计算过程。

TA的精华主题

TA的得分主题

发表于 2005-5-9 13:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用gvntw在2005-5-9 13:50:00的发言: 我不赞同apolloh说的,按三键结束才算数组公式,主要是看他内部的计算是否使用数组,如sum(countif(data,{,}))虽然不用三键结束,但其内部进行了数组运算(常量数组),应该也算数组公式,而sumproduct()虽然平时大都不用三键结束,但如果其内部进行数组运算,也要算数组公式,用sumproduct()代替sum()数组公式,只是省却按三键结束的麻烦,并没有改变公式的计算过程。

你没看后面的,已经修正了说法,不过也不是完全同意你们的看法。

[em04]

另外,红色部分我也不同意,不是使用数组,而是是否进行了多重计算(也可以说是数组运算)。

我还有一观点:

如果按照EXCEL帮助中的定义,数组运算是否可等同于数组公式,还说不准。虽然其内部都是运用了数组同时进行多重计算,但数组公式的定义还在于其有个{}的形式来结束,这样做的目的在于明确告知EXCEL将该公式进行多重计算(数组运算)。大家是否混淆了数组运算和数组公式的概念呢?

另外可以参考VBA输入工作表函数的公式是如何来区分普通公式和数组公式的。

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

TA的精华主题

TA的得分主题

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

此问题起因GVWTN兄的那个测试题里的SUM(IF()),我发现使用SUMPRODUCT()却不行.

所以才引发我的这个问题.同时在使用中还有MATCH(),TRANSPOSE()等运用中发现.还是要用数组方式结束.所以我想是否与它的里面嵌套的函数有关.所以才发了这个帖希望大家能对它讨论一下.发现大家对此研究之深,着实让人佩服.而且详述非常之细.谢谢!本想发表一下.想了半天,发现写不出什么来.所以只能谢谢大家的参与.再次感谢!!!

sumproduct如果需要用sum(参数1,参数2,参数3)的形式输入,必须每个数组参数的尺寸(行列数)相同。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 20:17 , Processed in 0.037936 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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