ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 请高手解释一下内存数组这个概念

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-5-20 12:06 | 显示全部楼层 |阅读模式
请高手解释一下内存数组这个概念,我对这个概念一直都很含糊,最好能举个例子说明,先谢了
[此贴子已经被作者于2006-5-20 12:07:39编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-20 13:51 | 显示全部楼层

内存数组(computed array)公式指的是,公式的计算结果是数组并直接存入内存,可被整体调用来参与其他计算的数组公式。

一个公式的参数为数组,并不能确定其为内存数组公式。内存数组公式的参数可以是原始数据区域的直接引用,也可以是常量数组,或由其它公式计算出的内存数组结果。

内存数组的一个重要特征是,计算结果是数组,而非引用(比照多维引用)或单值;内存数组的另一个特征是,参数值直接来源于原始数据,而不去引用辅助单元格公式的计算结果。

内存数组公式的结果也可存于多单元格中,但多单元格数组公式的计算结果不一定都是内存数组。除了存于多单元格的内存数组公式外,其他多单元格公式是根据,某参数中的数组或引用的行列位置,相对于结果存放的单元格行列位置的对应关系,来计算单个单元格的相应值。多单元格公式的结果不能作为一个整体被其他公式再次利用,它必须存于Excel单元格区域中,才能正确地显示和被利用。

使用多单元格公式的意义在于,用一个公式一次成批地计算多个单元格,可减少了Excel反复重算的次数。在运算速度上,多单元格公式要比在单元格中分别输入公式要快。

由于内存数组公式不需要用来存储中间结果的辅助单元格,所以在占用磁盘空间和减少Excel重算次数方面很有优势。但是,其需要在内存中一次完成所有事,那么,就要求有足够的内存才能支持其计算。否则,如果内存太低,就需要等待系统响应,运算速度有可能不如添加辅助单元格公式的方式,而且还有可能导致死机。这一个问题,随着计算机硬件的发展,内存容量不断增加,会逐渐得到反解。Posted by apolloh

TA的精华主题

TA的得分主题

发表于 2006-5-20 13:56 | 显示全部楼层

雾里看花。

特征一:内存

内存数组有别于引用,有别于常量数组,它存在于内存之中,它不反映在工作表的单元格中,它不直接反映在单元格公式中,它不在我们的视觉范围内,我们看不见它。

内存数组有别于引用,有别于常量数组,内存数组是(不一定对)计算的结果,而这个结果,我们一般把它作中间变量使用,一般作Index()、small()、Min()等函数的参数使用。

特征二:数组

如何解释都好像是多余的,它在内存中存储方式是数组,有别于单值,作一个整体供调用,或作其它函数的参数,或作区域数组公式把结果显示在单元格中。

=index({1,2,3}+10,row(1:1))

公式中{1,2,3}是一个常量数组(在内存中应该也存在这个数组,常量数组应该也是内存数组),{1,2,3}+10的结果是一个内存数组,在编辑框中用选取{1,2,3}+10,按F9:

=INDEX({11,12,13},ROW(1:1))

这里,{11,12,13}就是一个内存数组。

A1:a10为20以内的数值,求大于10的最小的5个数:

选择B1:B5,输入下面公式,按Ctrl+Shift+Enter结束。

=SMALL(IF(A$1:A$10>10,A$1:A$10),ROW($1:$5))

在编辑栏内,选择全部公式,按F9,你看到的是一个数组,它的外部特征就是那个大括号,这个数组是一个内存数组。

这个数组也可作其它函数的参数使用:

=INDEX(SMALL(IF(A$1:A$10>10,A$1:A$10),ROW($1:$5)),ROW(1:1))

别忘了按Ctrl+Shift+Enter结束。

我总觉得这是个说不清的概念,得慢慢去悟它。算抛砖,请高手指正。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-20 13:59 | 显示全部楼层

谢谢!

不过人蠢啊,还是不能领会,如果有个例子说明一下就好了

TA的精华主题

TA的得分主题

发表于 2006-5-20 14:04 | 显示全部楼层

=SMALL(IF(A$1:A$10>10,A$1:A$10),ROW($1:$5))

公式中的抹黑部分,计算的结果也是一个内存数组。它作为Small()函数的一个参数使用,最后生成的结果还是一个内存数组。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-5-20 14:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢山菊花版主的耐心解答,有点头绪了,以后慢慢领悟

TA的精华主题

TA的得分主题

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

以最常见的求不重复个数公式再请教山菊花版主;

比如A1:A5为 1,2,2,3,4 公式{=SUM(1/COUNTIF(A1:A5,A1:A))}计算结果为4

公式在计算过程中,COUNTIF(A1:A5,A1:A5)得到一个数组{1;2;2;1;1}

这个数组{1;2;2;1;1}是不是内在数组?

TA的精华主题

TA的得分主题

发表于 2006-5-20 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
是不是内存数组,提供一个判断依据,定义为名称,如list,在单元格中输入=Index(list,数字),看看能不能返回正确结果,内存数组是可以返回正确结果的。

TA的精华主题

TA的得分主题

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

这样还不够充分,把表达式定义为一个名称,在公式中使用该名称,在编辑栏选取名称按F9,如果显示的是数组(带花括号),这个表达式的结果就是内存数组。

例:把“COUNTIF(A1:A5,A1:A5)”定义为list

在单元格中写入公式使用该名称的公式:

=list

=index(list,2)

=min(list)

=count(list)

无论在哪个公式中,在编辑栏选取list,按F9,结果为一个包含5个数的数组,这5个数的前后是一对花括号。

只判断index(list,数值)能否返回结果还不够。

如:x=5,y={5}

前一个是单值,后一个是数组,用index()、count()都可以得到相同的结果,不能判断出哪个是单值,哪个是数组。

但是,在编写公式的时候,我们还是会用index()去判断是不是内存数组的,因为我们希望某个计算结果是一个内存数组,常常知道,假如成立,数组内应该会有多少个数,如果它只返回一个结果,我们可以判断,它不是内存数组。

用index()可以否定一个内存数组,不能确定一个内存数组。

TA的精华主题

TA的得分主题

发表于 2006-12-6 10:16 | 显示全部楼层
很是多谢!这么多天泡在这里,终于明白内存数组这个东西,原来是定义的.我看了很多实例,被那些"DATA02"、"NEWDATA03"给搞晕了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 10:41 , Processed in 0.039761 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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