ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 有志于用活MMULT函数的不要错过(系统的视角,二维的思维)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-25 14:59 | 显示全部楼层
什么意思,看不懂,呵呵!!

TA的精华主题

TA的得分主题

发表于 2009-9-25 15:01 | 显示全部楼层
?? 真是搞不懂。

TA的精华主题

TA的得分主题

发表于 2009-10-23 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太强了!!!!!!!
看到MMULT我就潜意识地想逃。
MMULT,MMULT,我不怕你,我一定要掌握你

[ 本帖最后由 onthetrip 于 2009-10-23 15:31 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-10-24 12:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
N年没回家了,最近才回来凑热闹,今天看到楼主的帖子,感觉非常精彩。
一口气看到第八页,看到楼主“使用IF为每个反馈值 铺上了 “网格”,让飘渺的反馈数组 归位”我想说一句。
对于参数为数组的返回值,我的理解是一个三维数组,好像楼梯,要把楼梯的每个平面投射到地面形成二维数组,只要用N()或T()一下就可以了,所以对 IF(1,三维数组返回值) 这方法的解释我觉的有点牵强,其实只要T一下就OK了。
记得N年前,陈军对这里一问题有过解释。后面的还没看,不知是否已有人提过这点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-25 07:52 | 显示全部楼层
呵呵,用IF也好,用T,N也好,应该都是因为外层的函数的介入使得数组强制转换了(就是你说的楼梯被压平了)。不过用IF还有一个好处,就是他忽视引用的值是文本还是数字,在使用N,T时对这个会有要求,如果不做修正会导致某些数据丢失。

不过可能从字符上用IF显的多了点,有点拖沓,呵呵。

[ 本帖最后由 胡剑0227 于 2009-10-25 07:53 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-10-26 08:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 胡剑0227 于 2009-10-25 07:52 发表
呵呵,用IF也好,用T,N也好,应该都是因为外层的函数的介入使得数组强制转换了(就是你说的楼梯被压平了)。不过用IF还有一个好处,就是他忽视引用的值是文本还是数字,在使用N,T时对这个会有要求,如果不做修正会 ...

用IF也可以像T或N一样压平数组,也就是转化成二维数组?我最近在论坛上碰巧看到一个例子,IF好像没有这个功能,请胡老师释惑

IF函数转换.rar

3.16 KB, 下载次数: 45

TA的精华主题

TA的得分主题

发表于 2009-10-26 08:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 胡剑0227 于 2009-10-25 07:52 发表
呵呵,用IF也好,用T,N也好,应该都是因为外层的函数的介入使得数组强制转换了(就是你说的楼梯被压平了)。不过用IF还有一个好处,就是他忽视引用的值是文本还是数字,在使用N,T时对这个会有要求,如果不做修正会 ...

用IF也可以像T或N一样压平数组,也就是转化成二维数组?我最近在论坛上碰巧看到一个例子,IF好像没有这个功能,见附件,请胡老师有空的时候释惑

IF函数转换.rar

3.16 KB, 下载次数: 34

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-26 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 onthetrip 于 2009-10-26 08:47 发表

用IF也可以像T或N一样压平数组,也就是转化成二维数组?我最近在论坛上碰巧看到一个例子,IF好像没有这个功能,见附件,请胡老师有空的时候释惑


啊,呵呵。这个帖子我看过。我想说里面表达的似乎和你相反的意思,或者说正好证实了IF的这个功能,而且是忽视引用区域的属性的(文本或数值)。

印象中这位朋友的疑问是:为何在编辑栏中按 F9 时出现的结果和 整个数组公式 反馈到单元格区域时 并不一致!
=========================================================================================
哦,没看完整,抱歉...继续看中

[ 本帖最后由 胡剑0227 于 2009-10-26 14:39 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-26 15:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
呵呵,解惑似乎没这个能力,我们一起讨论吧,呵呵,我抛砖引玉,只供参考呀...

第一个疑问:
我认为IF并没有将INDIRECT的多维引用转化成平面的二维引用;另外,如果将INDIRECT前面加上T函数,则按F9或者INDEX都能得到正确的结果,说明IF并不能替代T函数。

两个角度,第一尝试去解释,第二尝试去解决问题。
尝试解释:从实质上讲 就是疑问 为什么 用IF的数组公式返回到单元格区域时和按F9或者在公式中嵌套传递时的值是不一样的?

我给自己的解释是,数组公式返回到单元格区域的运作机制并不能简单的理解成 先计算出运算结果,然后将运算结果填充到单元格。很可能这个运算和将值填充到单元格这个两个过程是水乳交融的,或说在将值反馈到各个单元格时都进行了运算,如果每次运算都可以用一个F9替代,那么是否可以理解成一个数组公式返回到单元格区域时是经历了多个F9,而直接在编辑栏中按F9就单单是一个F9,自然结果不同可以理解。

从信息论的角度讲,直接在编辑栏中按F9,Excel是无法得到当前要返回的值在整个数组公式中是处于第几位的,于是它可能就默认以第一位来充当(如果编辑栏内能得到这个数组元素位置信息,那么很可能在不同的数组单元格的编辑栏中按F9时出现不同的返回值,比如1号位置自然都是q,但2号位置可能又都变成了w...)。我们知道在 定位 对话框中有一个 选项:当前数组。说明Excel对于数组公式单元格中的每一个单元格内都具有所在数组的属性,所以是否可以认为 在编辑栏中按F9,或在公式中做嵌套传递时是因为丢失了这些属性而变得不够完善,而这些信息在完成 OFFSET 等函数多维引用过来的数组时是不可或缺的。

另外一个例证:数组公式 =rand()*row($1:$10)^0 ,在编辑栏中直接按F9 我们可以看到10数字是相同的,而将其反馈到单元格区域时 这些值是不同的。所以证明了在数组公式返回到单元格区域时每个单元格内都进行了运算。

为了更好的说明时间的问题:尝试数组公式:=(NOW()*100000000-INT(NOW()*100000000))*ROW($1:$1000)^0
这里 *100000000 是为了能看到更加细小的时间间隙(因为可以想象Excel在各个单元格之间分配时间脉冲的间隔是极小的) 随便说一句,循环迭代 最容易忽视的也在这里,这个是很关键的,呵呵,跑远了。

所以上面我的猜想是计算脉冲不够或者信息丢失造成的。于是疑问又来了,为什么别的函数都好好的,就OFFSET,INDIRECT这些函数出现这个问题呢?

这,我不是太清楚,但很公道的讲,别人都好好的,就它们出问题,原因就在于它们本身吧,呵呵。函数功能太强大?多维引用?(偏向于这个,如果内存也可以看成平面存储,而他是多维,那Excel是否是以 时间分隔的机制 体现多维(多个平面),如果这样很好解释了为何要多个计算脉冲了),不过到这里,我感觉有点想象力太丰富,这里很多东西我都不懂,让内行笑话了,呵呵 ,再想下去泡沫太重了,呵呵)

所以,我草率的认为 由于 多维引用,计算脉冲,信息量丢失等原因造成了以上现象,因为F9和直接嵌套使用时无法利用这些信息。

不过本例中,不能说IF函数没有生成 二维引用 ,更确切地说是 生成的 二维数组 是半成品。

当然问题还在,为什么用 T,N 就可以呢? 这里的问题就是 IF 和 它们的区别了,呵呵,这个我真不清楚,但中性的分析应该问题出在IF上吧,需要多个F9是IF造成的?不讲了,这个真的自己都糊涂,这个还请路过的有独到见解的朋友来回答吧。

下面我们来讲这么解决这个问题。
====待续....解决方案

[ 本帖最后由 胡剑0227 于 2009-11-13 21:21 编辑 ]
同一个数组公式却具有不同的NOW值.jpg

TA的精华主题

TA的得分主题

发表于 2009-10-26 15:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
先谢谢胡老师的解答,然后慢慢看,消化。。。。。。
印象中这位朋友的疑问是:为何在编辑栏中按 F9 时出现的结果和 整个数组公式 反馈到单元格区域时 并不一致!
(我是借用那位朋友的例子来讨论IF压平数组的问题,当然,原帖子不是讨论这个问题,呵呵)

[ 本帖最后由 onthetrip 于 2009-10-26 16:20 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 08:26 , Processed in 0.032241 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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