ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 有志于成为数组公式高手的不要错过(功力修炼)(胡剑开课了...)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-1-19 16:52 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
本帖最后由 zeerise 于 2012-1-19 17:06 编辑
piggy_19840215 发表于 2009-5-12 10:59
补充有关《为什么AG列返回错误》问题的附件

[ 本帖最后由 piggy_19840215 于 2009-5-12 11:06 编辑 ]


AG列是一个三维数组,AH列是一个二维数组下拉后形成的,因此AG和AH中ROW()的含义是不同的,AG列是对所有AH列的求和,而由于index函数在AG列向量设置问题,形成一个三维数组,在对三维数组求和时求的是比较的次数叠加,进行了8次比较,因此结果为8,类似于小区有8橦楼,不管每一橦有多少户人家,垂直投射在水平面上永远是8橦楼,把AG列改为={SUM(--($AB$2:$AB$9=INDEX($AB$2:$AB$9,TRANSPOSE(ROW()-1))))}就是一个二维平面的求和了结果是12,即AD列求和。接触并了解公式及数组半年,纯属个人理解,望高人指正。

为什么AG列返回错误.rar

4.71 KB, 下载次数: 7

个人理解,经过测试好像通过了,由于水平有限请大师们点评下

点评

不过,初始学习的时候不要过于纠结于一些特例,这样反而会影响整体的进度。先把握大体的脉络...  发表于 2012-1-23 23:08
恩,这个问题是比较有难度的,早上可能没时间解读分析了,我会好好看的  发表于 2012-1-20 08:00
恩,我会看看的,初步感觉你比较善于探索...  发表于 2012-1-20 07:29

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-23 22:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 胡剑0227 于 2012-1-26 11:46 编辑
zeerise 发表于 2012-1-19 16:52
AG列是一个三维数组,AH列是一个二维数组下拉后形成的,因此AG和AH中ROW()的含义是不同的,AG列是对所有 ...


恩,前几天忙着过年了,晚上抽空看了下,发现了个新的性质。另外这个问题确实比较有意思,呵呵。

先仓促的回答一下吧,过几天空了整理一下测试附件,呵呵
AG列
我曾经提过,决定公式在单元格返回值的不仅仅是公式,因为单元格本身也是一个“参与者”,也提过数组公式落在一个单元格中与落在多个单元格中是不同的。我认为单元格区域不能简单的认为是多个单元格,实际上它们应该属于不同的对象类型了。这就是具体的原因。

AG列的情况正好是这个思路的具体表现,你可以试试在一个单元格录入你的公式,然后再试试在两个连续的单元格中录入你的数组公式。
暂时的结论是:
结论,INDEX第2,3参数为数组,如果以多单元格数组公式录入,并且INDEX返回值直接进行了数学运算或比较运算(欢迎继续补充)时将表现出普通函数数组运算的性质(即返回友好的内存数组)。


另外导致这个问题更加扑朔迷离的是ROW函数,同样这个函数也是根据公式的宿主单元格情况动态变化的,有对应的帖子将这个问题,你可以这么测试 在 A1:A2单元格区域录入联合(这么表达纯是尝试,为了更好的区分)数组公式  =SUM(ROW()),会得到3,1+2=3;然后再在A4:A6单元格区域录入联合数组公式 =SUM(ROW()),会得到 15,4+5+6=15,我想你应该明白ROW函数在这个工程中发生了什么。

于是那个返回8,完全可以理解为 =SUM(--(AB2:AB9=AB2:AB9)),所以等于8.

至于AI,那么原理相同了,无非是 =SUM(--(AB2:AB9=TRANSPOSE(AB2:AB9)),是一个十字交叉的运算,所以返回12...你懂得,呵呵

为什么AG列返回错误.rar

8.25 KB, 下载次数: 27

TA的精华主题

TA的得分主题

发表于 2012-1-24 21:56 | 显示全部楼层
努力学习,希望也能成为高手

TA的精华主题

TA的得分主题

发表于 2012-1-25 12:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好好学习天天向上

TA的精华主题

TA的得分主题

发表于 2012-2-1 10:54 | 显示全部楼层
胡剑0227 发表于 2012-1-23 22:52
恩,前几天忙着过年了,晚上抽空看了下,发现了个新的性质。另外这个问题确实比较有意思,呵呵。

先 ...

上班好多天了,太忙了,没时间看,今天突然想明白了,ROW()的数组公式当在多行联合用时返回的是一个向量,单行用时返回的是一个值,因此AG列为运算方式=sum($AB$2:$AB$9=$AB$2:$AB$9),AH列为单行数组公式下拉,它的运算方式=sum($AB$2:$AB$9=AB2)下拉,AB2:AB9列与AB2比较,自动将AB2扩充为一列8行,得到的当然是2。结论:ROW()的数组公式当在多行联合用时返回的是一个向量,单行用时返回的是一个值

点评

恩,大致对头,单行使用时是一个单元素的数组,呵呵。可以F9查看。  发表于 2012-2-5 05:51

TA的精华主题

TA的得分主题

发表于 2012-2-9 17:11 | 显示全部楼层
哇噻,4百多楼呀,先收藏着慢慢看~

TA的精华主题

TA的得分主题

发表于 2012-2-13 09:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-22 03:59 | 显示全部楼层
zhanhewang 发表于 2009-5-7 18:11
用行数乘1000是为了在排列时上面的行始终在前面。SMALL(     ,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7) ...

有点小深奥,一点一点学习

TA的精华主题

TA的得分主题

发表于 2012-2-22 08:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-23 11:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-6 14:37 , Processed in 0.050321 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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