ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-24 16:06 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
问题比上面描述的还要复杂,不过估计这都是由于用单元格引用(相区别于数组)造成的,Excel智能性导致了函数值的混淆。

动画演示可以得到的结论1:虽然相邻的单元格在公式中没有引用,但是Excel在返回公式结果时还是会考虑公式单元格所处的行列位置的(这个早已经发现了,这里它又是出现这样的令人讨厌的智能,呵呵,这个问题本想单独发帖的,不过最近没时间)

先看一下动画的混淆现象,然后大家讨论的造成的原因,最后大家一起想想解决的办法。

解决方案设想一:使用一个数组公式,将4列引用用名称包装起来,确保其返回值的属性是数组,而不再是单元格引用。只是设想,没有验证过...

[ 本帖最后由 胡剑0227 于 2009-11-24 16:10 编辑 ]
Excel的智能.gif

TA的精华主题

TA的得分主题

发表于 2009-11-24 16:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我验证了一下,将4列引用用名称包装起来,确保其返回值的属性是数组,而不再是单元格引用,也不行啊

TA的精华主题

TA的得分主题

发表于 2009-11-24 16:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-11-24 23:27 | 显示全部楼层
原帖由 胡剑0227 于 2009-5-8 20:37 发表


给自己点时间,只要有这个体悟,需要用到时就会有思路的。
数组公式,我的理解还是体现在 运算上,不是局限于函数。比如 10^(row($1:$5)),不过不知道你有没有理解数组的方向性,就是行,列。在一维数组单一单元 ...


关于你讲的底数和指数方向一致的情况下,发生的结果是不是一一对应的,比如这个ROW($1:$5)^ROW($1:$5),它的结果是不是就是1^1;2^2;3^3;4^4;5^5

TA的精华主题

TA的得分主题

发表于 2009-11-25 08:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
练好基本功,就能成就高手

TA的精华主题

TA的得分主题

发表于 2009-11-25 09:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
都是高手 高高手呀   学习学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-25 11:47 | 显示全部楼层
原帖由 fmlshq 于 2009-11-24 23:27 发表


关于你讲的底数和指数方向一致的情况下,发生的结果是不是一一对应的,比如这个ROW($1:$5)^ROW($1:$5),它的结果是不是就是1^1;2^2;3^3;4^4;5^5



是的,不过这种情况下的数组公式 在运算机制上其实是简单的 点对点 的批量运算,如果两参数方向是交叉的,就是方向不一致,那么就对应的运算是 点和线 的运算....

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-25 12:01 | 显示全部楼层
原帖由 evillenlee 于 2009-11-24 16:23 发表
我验证了一下,将4列引用用名称包装起来,确保其返回值的属性是数组,而不再是单元格引用,也不行啊



呵呵,是不是你真的很简单的直接用名称来引用而已呀,呵呵。那么属性不是依然是单元格引用呀,我的意思是用函数公式对单元格引用进行处理,使得 在 值 上是等价的,但摒除了 单元格属性。

我是这么做的: =lookup(row($1:$4),row($1:$4),$b1:$b4) ,其他列类似。
这样做以后就不会出现那种混淆情况了。


在数组公式中大家讨论比较多的一个情况是 按 F9 的值 和 直接返回到单元格 的值是不同的。

我现在这里的这个问题,在作为 参数 嵌套在其他函数公式内时不会发生紊乱(是否就是曾经猜测的使用F9 或 直接作为参数嵌套时 它得不到公式单元格的信息的缘故),因此在实际使用时危害不是很大。数组公式产生内存数组,而这种友好的可以在函数直接嵌套传递的情况是我们最原因看到的。

所以,问题只是会出现在 把这个串接 当成最终结果来显示的时候,根据上面的思路,我们可以用 INDEX(IF串接公式,row(a1))来进行显示。

或 使用 lookup(row($1:$16),row($1:$16),IF串接公式)

[ 本帖最后由 胡剑0227 于 2009-11-25 12:02 编辑 ]

破解智能性判决.rar

4 KB, 下载次数: 62

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-25 12:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
再补充一个破解4,上面也猜测过 应该是 LOOKUP的第三参数不完整造成的,于是就安安分分的将第三参数做完整。

不过这个时候你可能又会提出另一个问题,呵呵,先不说了,那个我也有点猜测...

把第三参数补全以后也解决问题了。(公式不用仔细看,就是把LOOKUP第三参数的4元素补齐为16元素)
=IF(ROW($1:$16)<5,$B$17:$B$32,IF(ROW($1:$16)<9,LOOKUP(ROW($1:$16),ROW($1:$16)+4,$C$17:$C$32),IF(ROW($1:$16)<13,LOOKUP(ROW($1:$16),ROW($1:$16)+8,$D$17:$D$32),LOOKUP(ROW($1:$16),ROW($1:$16)+12,$E$17:$E$32))))

[ 本帖最后由 胡剑0227 于 2009-11-25 14:59 编辑 ]

破解智能性判决-补充破解4.rar

6.59 KB, 下载次数: 54

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-11-25 12:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
解决方案提出了不少,我想混淆机制有兴趣的也可以研究一下(自己目前还没有心思去探索,呵呵,记得要分享呀)

估计是 引用 值的相互调用造成的,而当这类公式与其 引用单元格 处于 同行,同列等 特殊位置时就会触发 Excel的无限联想,造成混淆。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 14:46 , Processed in 0.050956 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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