ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论][已解决]关于SUM的疑问

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-17 20:09 | 显示全部楼层 |阅读模式

仔细学习了[函数用法讨论系列26]套用offset函数后数组求和问题

但仍然还是不能明白我在附件里遇到的问题:

1 为什么"输入3"和"输入2"的结果不同.
2 既然SUM不能生成内存数组,为何"输入4"的结果是正确的.

[此贴子已经被作者于2006-12-20 23:28:16编辑过]

TA的精华主题

TA的得分主题

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

好象原来别人分析的内容没仔细看,怎么还在钻这个问题?下面几个问题您能够回答吗?

1、Offset(Indirect(...),,,,)到底是谁产生的三维引用?

2、Offset()+Indirect()函数组合应用,如果Offset不指定行、列数,与直接用Indirect函数是否相同?

3、=SUM(INDIRECT({"A2","B3","C1"}))和=N(INDIRECT({"A2","B3","C1"}))都在单元格中输入,结果有什么区别?

4、接上一问?都定义成名称呢?

我记得在原来的讨论帖上明确分析过的,可能您没仔细理解:)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-17 22:56 | 显示全部楼层

我目前的理解是

(1)INDIRECT产生了三维上的三个点,

(2)经OFFSET就产生了三个面(无论是1行1列还是多行多列,1行1列是特殊的点面和直接用INDIRECT就不一样了),

(3)SUM函数只能计算第一个面上的值,其他面上的值需要多格输入才能显示,而且仅限于显示罢了,没有产生真正的内存数组.

SUM(INDIRECT({"A2","B3","C1"}))和=N(INDIRECT({"A2","B3","C1"}))都在单元格中输入的结果一样是因为此时SUM(A2)=N(A2);SUM(B3)=N(B3),SUM(C1)=N(C1)

但当输入SUM(INDIRECT({"A2:A3","B3","C1"}))和=N(INDIRECT({"A2:A3","B3","C1"}))就不一样了,因为SUM是对面求和,而N只取第一个,但N可以运用与三维产生真正的内存数组,而SUM不行.

(4)当定义成名称以后无论是SUM(INDIRECT({"A2","B3","C1"}))还是SUM(INDIRECT({"A2:A3","B3","C1"}))在普通输入下都不应该有值(但事实却不是这样,这正是我的疑问之一),而N可以(不过是各个面的第一个).

[此贴子已经被作者于2006-12-17 22:57:46编辑过]

TA的精华主题

TA的得分主题

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

1、由于OFFSET并未指定参数,所以OFFSET并未改变INDIRECT函数产生结果,仍为三个平面上的3个点。

2、由于您使用INDIRECT函数产生的引用为一个点,所以在单元格输入时使用SUM函数和N函数是一样的,都只能将常量数组{"A2","B3","C1"}的第1个值带入计算,结果为1;如果使用多单元格联合输入,则会得到1、9、8 三个值。

3、但对于输入3的结果,正是由于INDIRECT函数产生的是3个点(注意与真正的面相区别),由于在名称中输入,系统自动按数组公式进行运算,所以SUM(Indirect())公式直接将3个点汇总。

4、当你在一个单元格中输入:=SUM(SUM(INDIRECT({"A2:B2","B3:C3","B1:C1"}))),公式并不会将所有加总,仍然是各个面对应相加,结果只能显示在1行2列的单元格中为:9,9

以上的解释与我原来的分析的并不冲突,关键是目前只是一点,以前是一个区域而已。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-18 00:06 | 显示全部楼层

但是既然和原来的区别只是"目前只是一点,以前是一个区域"

为什么原来的NAME_2普通输入是#VALUE!,而现在的能计算呢?

我认为要么现在的也是#VALUE!,要么原来的NAME_2是45.

TA的精华主题

TA的得分主题

发表于 2006-12-18 00:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我不清楚你所说的NAME_2,是否跟错帖了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-18 00:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-18 03:15 | 显示全部楼层

怎么回事,不是已经说得很明确了吗?

上面的例子中是一个区域,不是一个点,所以输入普通公式,结果错误,而一个点的话,就直接汇总得出结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-12-18 17:58 | 显示全部楼层
QUOTE:
以下是引用gdliyy在2006-12-18 3:15:26的发言:

怎么回事,不是已经说得很明确了吗?

上面的例子中是一个区域,不是一个点,所以输入普通公式,结果错误,而一个点的话,就直接汇总得出结果。

我知道假如"是一个区域,不是一个点,所以输入普通公式,结果错误,而一个点的话,就直接汇总得出结果"已经是规则了, 那结论是显而易见的了.

但不理解用数组输入和名称输入为何结果不同.

QUOTE:

知道了,名称和单元格的循环遍历方向不同.

关键是这个规则和"SUM不能进行三维运算"有出入.

如果将"SUM不能进行三维运算"改成"SUM不能进行平面元素大于一个的三维运算"就又一致了.

QUOTE:

原来:
1.同上.
2.原来SUM的循环变量最多两个,大于两个需要借助单元格位置来提供.

[此贴子已经被作者于2006-12-20 23:27:39编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 10:28 , Processed in 0.044066 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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