ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 为什么C5公式普通输入和数组输入返回值不同?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-6-27 15:36 | 显示全部楼层 |阅读模式
工作表中自定义名称:数量=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)

详见附件,同样的公式,在C5普通输入和数组三键输入后,返回结果不同:

1.jpg 2.jpg

原因是当直接输入时,excel按照隐含交叉(公式所在单元格与引用单元格之间的位置的交叉单元格的值)方式计算;而三键输入时,excel按照数组运算方式计算。

同理可以验证右边区域的那些公式。

注意:红色区域是普通公式,按照隐含交叉引用方式计算;蓝色区域是数组公式,按照数组运算方式计算。

[ 本帖最后由 lrlxxqxa 于 2010-6-27 15:38 编辑 ]

隐含交叉.rar

3.78 KB, 下载次数: 77

隐含交叉2007.rar

7.06 KB, 下载次数: 64

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 15:39 | 显示全部楼层
结合此例说一下隐含交叉和数组运算这两种不同的运算方式:

数量=OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1),这里是利用offset引用了一个动态区域,即A列的非空单元格(除了A1),返回到单元格中也就是一个内存数组:{2;3;2;4;8;1}

当我们在C5输入=数量时,公式所在单元格C5与“数量”引用的动态区域A2:A7,交叉在A5单元格,所以返回A5单元格的值=4。
如果还理解不了,可以想象C5是一个点(红色),A2:A7是一条线(黄色),红色和黄色垂直交叉的交集所在单元格的值,就是公式返回的结果。

当我们在C5三键输入={数量}时,excel就不会按照隐含交叉引用方式运算了。因为C5是一个单独的单元格,excel会把“数量”引用的动态区域的第一个值返回,即{2;3;2;4;8;1}里面的第一个元素=2。

另外,当普通公式输入区域与黄色区域没有交集的时候,结果出错#VALUE!;如果以数组公式输入则不会出错,因为excel根本就不会和黄色区域去交叉比对。

[ 本帖最后由 lrlxxqxa 于 2010-6-27 16:09 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 15:41 | 显示全部楼层
多说几句,数组运算并非是三键结束的公式才能告知excel执行,有的函数内部的运算执行的就是数组运算,如sumproduct,这时就没有必要使用三键结束输入。

只有当sumproduct函数嵌套其它函数使用(比如if)不能满足要求的运算方式时,才需要三键结束。
比如下面这样一个公式
    =SUMPRODUCT((MATCH(IF(F6:F16="",,$B6:$B16),IF(F6:F16="",,$B6:$B16),0)=ROW(1:11))*(F6:F16<>""))

这个公式必须用数组公式方式输入是因为IF的条件引用了多个单元格,如果不用数组公式方式输入excel就自动以“隐含的交叉引用”运算,而事实上公式所在格的行是不与这个区域相交的(因为区域是多行列的,在同一工作表中根本不可能交叉),那样IF的条件就是错误,IF返回的结果也是错误,最后公式的结果也是错误!如果以数组公式的方式输入,excel必定不用隐含交叉的,那样就是一个正常的数组运算。

[ 本帖最后由 lrlxxqxa 于 2010-6-27 15:52 编辑 ]

如何让这个SUMPRODUCT函数不用三键结束也能返回正确值?.rar

14.6 KB, 下载次数: 36

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-27 15:53 | 显示全部楼层
个人理解:也不是说所有的数组公式(三键结束)都必须执行按照数组的运算方式执行运算。比如把一个常量数组{1;2;3;4;5}三键输入到单元格中,执行的就不是标准的数组内部运算,而是简单的把多个值和多个单元格一一对应。因为对于这样的公式,根本用不着以数组的模式来运算。

[ 本帖最后由 lrlxxqxa 于 2010-6-27 15:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-6-27 20:10 | 显示全部楼层
领悟领悟,终于知道师兄为什么进步快,这样学想不进步都难,

TA的精华主题

TA的得分主题

发表于 2010-6-27 23:10 | 显示全部楼层

TA的精华主题

TA的得分主题

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

回复 6楼 xiejiamei516 的帖子

不会数组不影响理解隐含交叉引用的,结合实例就没那么难了。

TA的精华主题

TA的得分主题

发表于 2010-6-28 09:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我正纳闷为什么会#Value呢,答疑解惑帖原来在这里。谢谢lr

TA的精华主题

TA的得分主题

发表于 2010-6-28 11:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-7-5 11:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-30 17:53 , Processed in 0.033462 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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