ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 我对数组与多维引用的认识(欢迎探讨)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-10-22 14:43 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:数组公式
【阅读习惯】Excel的帮助文件尽管存在一些错误(可能是粗心、翻译、中英文表述习惯差异等原因造成),但帮助文件是作为技术探究的必要基础依据。在阅读帮助时,我一般采取标出重点的精要部分来理解(有点关键词的味道),否则看长篇的东西,看到后面就忘记前面了。

【正文】近日屡见关于多维引用理解上的诸多疑问,在此,将本人的看法阐述如下:


1、数组的维度
关于Excel函数领域(非VBA中的概念)的“数组”,有单元素数组、一维数组、二维数组,具体阐述见我对数组与数组运算的认识(欢迎探讨)
也就是说,Excel中,数组的表现形式只有二维以内。

2、按F9我们看到了什么?

在本版置顶【答疑解惑】帖中,本人戏称F9查看公式计算结果的方法为“独孤九剑”,那么,到底在编辑栏,我们看到了什么呢?看到的是带{}的数组或单值结果。
(1)如果是数组,根据第1点,数组在Excel中只有二维以内的能表示出来。那么怎么可以期望F9来帮你看函数产生的三维引用呢(三维引用概念后面再说)!

(2)多单元格数组公式,很多情况下,它可以把内存数组按照行列位置对应到单元格区域中,因而,也就很容易被人把它与内存数组混为一谈。实际上,多单元格数组公式仅仅是公式的一种特殊的输入方式而已。

比如选A1:A3,输入=INDEX(B:B,ROW())再按CTRL+SHIFT+ENTER结束形成多单元格数组公式,那么将对应得到B1:B3的值,但这个情况充其量就是一次性输入公式而已,在A1:A3单元格中任意一个,按F9看到的结果是单值,并没有得到任何的内存数组。

从这两个小点看,就不需要再疑惑:为什么按F9看到的与在单元格中显示的结果不一致了。

[ 本帖最后由 gouweicao78 于 2010-9-28 09:05 编辑 ]

补充内容 (2017-10-29 08:53):
在ExcelHome技术论坛的最佳学习方法:http://club.excelhome.net/thread-117862-1-1.html

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-22 14:44 | 显示全部楼层
3、什么是引用?

【Excel帮助文件】如是说:引用的作用在于标识工作表上的单元格或单元格区域,并指明公式中所使用的数据的位置。通过引用,可以在公式中使用工作表不同部分的数据,或者在多个公式中使用同一个单元格的数值。还可以引用同一个工作簿中不同工作表上的单元格和其他工作簿中的数据

看看几个关键词,引用的作用——我概括为:标识位置、使用数据
也就是说,如果A1输入:3,那么=A1我可以说它是个引用,代表第1行第1列交叉的这个位置,也可以说它的值为3并代入计算。

但这两个作用是不等价的,很简单地说:用ISREF就可以判断什么是引用。
比如=IF(1,A1:A3)返回的是否可以作为引用?=ISREF(IF(1,A1:A3))返回TRUE,则表示可以把它看为是引用。
=IF(1,A1:A3):B3——也就是前面的IF可以后面直接使用引用符号与另一个单元格引用相接,得到的是对A1:B3的引用。也就是引用可以作为对单元格的一个位置标识,通过引用运算符,与其他引用合并起来表示单元格区域。

但是=IF({1,0},A1:A3,B1:B3)是否引用呢?用ISREF判断就返回FALSE,因此这个公式得到的是“”,也就是说,这里的作用是“使用数据”。

4、有哪些函数可以产生引用?
Excel函数分类中,有一个大类也是常用的——查找与引用函数。哪些函数可以产生引用呢?
您也许要问,前面说的=IF(1,A1:A3),那么IF就是可以产生引用的函数吧?
答案是:错!
您也许还要问,那么VLOOKUP、HLOOKUP、INDEX经常都是通用的,它们总该是一类的吧?
答案是:还错!这三个函数在查询方面确实有很多时候可以变通,但实际上,VLOOKUP、HLOOKUP得到结果是单元格的“值”而不是“引用”。INDEX则不然,它即可得到值也可以得到引用。

实际上,也只有INDEX、OFFSET、INDIRECT这3个函数可以产生引用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-22 14:44 | 显示全部楼层
5、关于维度(2011年2月16日补充)

详细论述请参考:关于引用的维数问题的探讨 http://www.exceltip.net/thread-17204-1-1-2.html

1、点、线、面、体已不易说清多维引用的维度。
2、可以按此方法来计算:先将某一工作表的行、列方向视为x、y轴,然后其它方向再视为其它坐标轴。只要动用其它轴,则在2维基础上增加维度。
3、参数中的数组,会执行数组间的运算规则,因而无法构建超过4维的引用。
4、大家只需要分清1、2维和多维即可,不需要分清具体的3、4维。


例1:=INDIRECT("A"&{1;3;5}&":B"&{2,4}) 的维度计算,因为参数为2个异向一维数组(都不在平面的x、y轴)因此算4维。返回A1:B2、A1:B4、A3:B2、A3:B4、A5:B2(实际就是A2:B5)和A5:B4(即A4:B5)共6个面。
例2:=INDIRECT("A"&{1,2;3,4}) 也是4维,因为在x、y之外,增加了2个维度,4个点可以视为4个不同空间上的点。
例3:=OFFSET(A1:B2,{1;3;5},0)——在我的算法中,是3维而不是4维,因为除了x、y轴之外,只增加了一个维度。

此时,不需要纠结于返回的是“面”还是“点”,是否计算“面为2维、点为1维”,再加参数中2个数组不同维度,而是动用了除x、y轴外的,都算上x、y两个维度再加参数中数组的维度。


例4:=INDIRECT("A"&{1,2;3,4}&":B"&{2,4,5})这里的参数{1,2;3,4}是2维的,与{2,4,5}这个1维数组会执行数组间运算规则,多出1列#N/A来。
(数组间运算规则:http://club.excelhome.net/thread-467862-1-1.html


OFFSET的三维、四维引用.gif

[ 本帖最后由 gouweicao78 于 2011-2-16 10:12 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-10-22 15:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
沙发。最近对引用和查找的函数,特别是三维引用的概念十分朦胧,希望草版的解释能让我豁然开朗,更上一层楼。慢慢学习
好像已经对值和引用的区别有点清楚了。

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

TA的精华主题

TA的得分主题

发表于 2009-10-22 15:37 | 显示全部楼层
记忆中哪里见过这么段类似的话:

if和choose第一参数如果是单个逻辑值或数值的话,可以看作直接把相应的参数位置表达式仍给外层函数,这里实际上可以是任何一种Excel的内部数据结构,包括引用、三维引用、引用型数组等,就看外层函数能不能处理。

TA的精华主题

TA的得分主题

发表于 2009-10-22 15:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我感兴趣的是为什么=IF(1,A1:A3)返回引用?
而=IF({1,0},A1:A3,B1:B3)却返回值?

TA的精华主题

TA的得分主题

发表于 2009-10-22 15:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
比如选A1:A3,输入=INDEX(B:B,ROW())再按CTRL+SHIFT+ENTER结束形成多单元格数组公式,那么将对应得到B1:B3的值
奇怪,这种多单元格公式输入row()怎么会变化,依次得到1,2,3呢?是不是这种输入方式等价于在A1中输入=INDEX(B:B,ROW()),然后下拉到A3?但为什么用多单元格数组公式在A1:A3中输入=INDEX(B:B,ROW(1:1))却得不到同样的效果?
不解。。。。。。

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

TA的精华主题

TA的得分主题

发表于 2009-10-22 15:57 | 显示全部楼层

回复 7楼 evillenlee 的帖子

如果6楼那段话我没记错的话

IF(1,A1:A3)  第一个参数是单个值, 那么就相当于A1:A3,具体怎么解释,是引用,是数组,完全看外围环境.
直接写=IF(1,A1:A3),那么就相当于=A1:A3,在普通公式里面用绝对交际原则,数组公式里面自然就是数组了
或者说,if对第二第三参数不做任何处理,直接交给外面一层


=IF({1,0},A1:A3,B1:B3),第一个参数是个数组,已经不可避免地要进行数组运算了,这时候会把3个参数都转换为数组的吧,先要协调数组的尺寸的,这样的话返回值当然不可能是引用了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-22 16:17 | 显示全部楼层
原帖由 子元女王 于 2009-10-22 15:57 发表
如果6楼那段话我没记错的话

IF(1,A1:A3)  第一个参数是单个值, 那么就相当于A1:A3,具体怎么解释,是引用,是数组,完全看外围环境.
直接写=IF(1,A1:A3),那么就相当于=A1:A3,在普通公式里面用绝对交际原则,数 ...


你的意思如果IF第一参数为数组的话就要运行数组运算,把后面两个参数也都转换为数组?这个说法我还是第一次听到。能解释通。你说的这些理论性的东西我们的论坛上有相关文章么?我没有搜到。还有那个绝对交集原则有没有标准的定义啊

TA的精华主题

TA的得分主题

发表于 2009-10-22 16:19 | 显示全部楼层
三维引用和绝对交集,用的是简体中文版Excel帮助文件里面的叫法
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-19 08:21 , Processed in 0.035730 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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