ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-5-13 12:01 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
以下是引用Hunter在2005-5-13 11:41:00的发言:

帖子太多了,没办法按楼主说的那样把1-88楼都看完。

陈述下我的看法:

1、所谓数组公式应该指的是返回值为一个数组的的公式,区别于普通公式之返回值为单个值。当然,不排除数组公式返回的数组为一个值,如{=A1},或{=Sum(*****)},因为Sum()本身已经把返回的数组求和了。

2、本人认为数组运算的提法可以淡化,它不是构成数组公式的因素。如果说某“系列值”为数组的话,那么任何对该“系列值”的一次操作都应称为数组运算,比如lookup、sum等。

chunjun提到的John大师的意思可能是认为不用数组公式和一般公式可以有相同的结果,而不必一定要用数组公式来复杂化。

以上只是本人的看法,欢迎大家讨论。

第一点,不同于数组公式的定义,不是返回多个值才是数组公式,是否为数组公式不是依赖于结果如何,数组公式也可以返回一个不是数组的结果值。判断是否为数组公式,是看公式是否以{}方式通知excel同步执行多组数据分别同时计算,或让一组数据分别同时返回到多个单元格中显示(也就是所谓的多重计算)

其他部分我同意你的观点。

数组是一些元素的简单集合,这些元素可以共同参与运算或个别参与运算。凡是数组参与运算的公式,都应该是数组运算,不论其是单一计算还是多重计算。

所谓的单一计算如,vlookup,countif,sumif,sum,dmax(这是筛选后再计算的,所以单一)等的普通公式用法

所谓的多重计算如,sumproduct(A1:B10,C1:D10),还有比如两个常量数组相乘{1,2}*{3;4} 等。对于一些不能直接支持多重计算的公式或函数,或结算结果为多个值的,就必须以数组公式的三键形式输入,比如A1:B10*C1:D10、IF(A1:A10=0,2,A1:A10)、SUM(A1:B10*C1:D10)等。

[此贴子已经被作者于2005-5-13 12:06:36编辑过]

TA的精华主题

TA的得分主题

发表于 2005-5-13 12:27 | 显示全部楼层

To apolloh

第一点实际上你的说法和我基本一样的。关于数组公式及其运算,比较典型的例子可以参考矩阵运算。数组运算的人机沟通方式即“{}”的形式。

有一点和你意见相左的是返回值为数组应该是其核心目的(方式还是多重运算,“{}”与Excel进行对话)。论坛上发烧友们喜欢用数组来解决复杂例子,只取(需要)其中一个数值可能会误会其本质。但结果是大家的目的,即解决方案。

TA的精华主题

TA的得分主题

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

to Hunter

是的,你说也有道理,数组公式是执行了多重计算,多重计算的作用在于在内存中同时返回多个结果。数组公式区别与普通公式如SUMPRODUCT的特点是它是以{}方式通知Excel执行多重计算(强调一点,多重计算不是数组公式的专利,SUMPRODUCT内部也执行多重计算)。

但我还认为,进行多重计算的最终目的不单纯是为了返回一个数组,其目的有三:

目的1:在内存中返回一个可以继续计算的数组运算的结果,继续其他数组运算;

目的2:在返回数组结果的基础上用函数去取数组的一些共性,Sum(数组),Max(数组),Min(数组)等函数实际上就是区数组的共性。

目的3:将数组结果直接返回到多个单元格中。

举例

目的1 {=a1:a10*b1:b10} 返回一个1列10行的多重计算结果

目的2 {=SUM(a1:a10*b1:b10)} 返回其数组求和值这个共性。对于这个目的不是数组公式的SUMPRODUCT是可以完成的。

目的3 可以直接将{=a1:a10*b1:b10} 的运算结果显示到一列10行的单元格中。

[此贴子已经被作者于2005-5-13 13:53:47编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-13 13:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不知是否我看错了.老兄举的例子.公式有误.

TA的精华主题

TA的得分主题

发表于 2005-5-13 13:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用yigepure在2005-5-13 13:41:00的发言: 不知是否我看错了.老兄举的例子.公式有误.

谢谢!冒号写成逗号了

[em04]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-13 20:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

引自梧桐的一段话.晕,他不说,我还忘了这茬.

=SUMPRODUCT(SUMIF(生产表!$A$2:$A$4,配方表!$A$2:$A$4,生产表!$B$2:$B$4)*(配方表!$B$2:$J$4=采购表!$B3),配方表!$C$2:$K$4)

SUMPRODUCT函数中使用sumif,第二个参数也是数组,为什么可以不用三键?

TA的精华主题

TA的得分主题

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

引自梧桐的一段话.晕,他不说,我还忘了这茬.

=SUMPRODUCT(SUMIF(生产表!$A$2:$A$4,配方表!$A$2:$A$4,生产表!$B$2:$B$4)*(配方表!$B$2:$J$4=采购表!$B3),配方表!$C$2:$K$4)

SUMPRODUCT函数中使用sumif,第二个参数也是数组,为什么可以不用三键?

晕!前面不都论述了Sumproduct()支持内部数组运算吗?而且Sumif()本身是支持数组运算的函数,但IF函数则不同,如果你需要IF函数结果生成内存数组,就必须用三键来结束的。

TA的精华主题

TA的得分主题

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

晕!前面不都论述了Sumproduct()支持内部数组运算吗?而且Sumif()本身是支持数组运算的函数,但IF函数则不同,如果你需要IF函数结果生成内存数组,就必须用三键来结束的。

我看到了你这句话.才想问的

------------------------------------------------------------------------------------------

看一个实例,如:=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的条件求和;

--------------------------------------------------------------------------------------

SUMPRODUCT()支持.可SUMIF()它支持吗?以你的观点,难道不要三键吗?

是否是我理解错了.

TA的精华主题

TA的得分主题

发表于 2005-5-14 10:28 | 显示全部楼层

纠正一个错误,sumif的第二个参数不论是常量数组还是区域引用其计算结果都是内存数组,只是当其第二个参数为引用时,如果不以数组公式的形式输入,会产生绝对交集(这是帮助上的定义,就是我们通常所说的隐含交叉引用),其显示公式所在单元格的行或列同第二个参数所在列或行的交叉单元格的为参数的计算结果。

如果一个公式的目的是要实现多重计算,那么我们可以用编辑栏中按F9来看到其结果,因为使用F9时,Excel强迫公式执行了多重计算而生成了内存数组。

一个以多重计算为目的(产生多个结果的,一个结果的不算)的公式,要判断其是否能在公式嵌套中作为内存数组直接使用,要看其在输入后以单键enter结束,是否会产生#value!错误,如果不会出现#value!,那么其就可以作为内存数组被支持多重运算的函数如SUMRPODUCT直接调用,而不用三键结束。

补充一点,如果多重计算返回的是三维引用,还需要先转换成二维的内存数组才能参与计算。
[此贴子已经被作者于2005-5-14 13:21:52编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-5-14 13:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-7 13:47 , Processed in 0.037952 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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