ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] [原创]内存数组之重新构建数组应用详解

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-2 15:26 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
感谢分享学习了

TA的精华主题

TA的得分主题

发表于 2015-11-3 09:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢分享学习了

TA的精华主题

TA的得分主题

发表于 2015-11-3 09:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-2-17 09:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 e表格学习 于 2016-2-17 09:44 编辑

楼主老师的内容好极了,著作时的认真态度和严谨更是令人敬佩。感谢老师!
现在看到“中级”,发现几个小小的问题(鸡蛋里挑骨头哈):“中级”第51行:
=COLUMN(INDIRECT("C1:C"&ROWS(DATA02)/3,0))
应该是:
=COLUMN(INDIRECT("C1:C"&ROWS(DATA03)/3,0))
另外,1、从一致性考虑,是否应该将第53行主公式中的“R”删去,即成为下式:
=LOOKUP(((ROW(INDIRECT("1:3"))-1)*ROWS(DATA03)/3)+(COLUMN(INDIRECT("C1:C"&ROWS(DATA03)/3,0))),ROW(INDIRECT("1:"&ROWS(DATA03))),DATA03)

2、第38行中:“由于当值为MOD函数整数倍时,取余结果为0”,这一部分不容易理解,可否改为:“由于当值(亦即MOD函数第一参数、被除数)为MOD函数第二参数(即除数)的整数倍时,取余结果为0”?
3、最后一题的“3行N列”一词,最好改为“3行3列”或“M行N列”,以求并列结构词语的构词的一致性。

TA的精华主题

TA的得分主题

发表于 2016-2-17 10:54 | 显示全部楼层
本帖最后由 e表格学习 于 2016-2-18 08:39 编辑
新手NO.1 发表于 2015-6-16 12:21
有个问题哈,就是=ROW(INDIRECT("1:"&COUNTA($K$14:$K$20)))这个公式在我转换成=COLUMN(INDIRECT("1:"&COUN ...

确实有这个问题!(5后面一串自然数,一直到256结束)
为什么ROW()没有这个问题,而COLUMN()有这个问题??
盼高手赐教!

http://club.excelhome.net/thread-1259297-1-1.htm解答了上述问题。l

TA的精华主题

TA的得分主题

发表于 2016-2-18 10:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 e表格学习 于 2016-2-18 10:16 编辑

“高级二”学习体会:
                                
                                         2
                                         3
          1        2        3         2
1        1        0        0        2
2        1        1        0        5
3        1        1        1        7
                                
                                
构造红色数组,是“高级二”实现纵向数组(不一定是一维,也可以是二维哦)自上而下(逐列)累加的关键点!                        
                                

TA的精华主题

TA的得分主题

发表于 2016-2-19 09:43 | 显示全部楼层
本帖最后由 e表格学习 于 2016-2-19 10:26 编辑

学习到“高级三”了。{0;2;5}+1={1;3;6},这个非常容易理解。关键是,除了楼主老师,谁会想到“创造”出下面红色数组,进而(利用MMULT函数“顺利地”)得到{0;2;5}呢?
能够想到的,一定是“数学脑袋”,非我等凡人也!
2
3
1
2
3
2
1
0
0
0
0
2
1
0
0
2
3
1
1
0
5

学到这里,小结一下:
重新构建内存数组的利器是LOOKUP函数(向量用法),此时,LOOKUP函数三个参数的特点如下:
1、第一参数(查找值):   一维或二维都可以,(结构可以“任意布置”,根据实际情况或题目要求,不难);
2、第三参数(返回区域):一维区域,其中内容是“死的”,也没什么好说的;
3、第二参数(查找区域):一维区域,其中内容不但是“活的”,而且神出鬼没,是大神级函数人物才可以自由驰骋的领地。

TA的精华主题

TA的得分主题

发表于 2016-2-19 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 e表格学习 于 2016-2-19 11:46 编辑

刚才175楼的回复怎么不见了???哦,审核去了。

TA的精华主题

TA的得分主题

发表于 2016-2-19 15:27 | 显示全部楼层
本帖最后由 e表格学习 于 2016-2-19 15:56 编辑

学习到“高级四”了。此处“L法”和“M法”,在俺菜鸟眼里,犹如二场魔术!!下面仅拆解一下“M法”魔术:

1、魔术第一招:
1
1
3
3
3
6
6
=LOOKUP(ROW(INDIRECT("1:"&SUM(Data04))),Data05)
2、魔术第二招(即楼主所称的“关键公式段”):
1
2
3
1
2
3
3
4
5
3
4
5
3
4
5
6
7
8
6
7
8
=LOOKUP(ROW(INDIRECT("1:"&SUM(Data04))),Data05)+COLUMN(INDIRECT("C1:C"&MAX(Data04),0))-1
3、魔术第三招:
1
0
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
0
1
1
0
=N(ROW(INDIRECT("1:7"))>=LOOKUP(ROW(INDIRECT("1:"&SUM(Data04))),Data05)+COLUMN(INDIRECT("C1:C"&MAX(Data04),0))-1)(注:式首的N不是“降维”,而只是把逻辑值转换为数字。)
4、最后,“亮瞎你的双眼”!!!
1
1
1
1
0
0
1
1
1
0
2
1
0
0
1
1
1
0
2
1
1
1
3
1
0
0
1
1
1
0
2
=MMULT(N(ROW(INDIRECT("1:7"))>=LOOKUP(ROW(INDIRECT("1:"&SUM(Data04))),Data05)+COLUMN(INDIRECT("C1:C"&MAX(Data04),0))-1),ROW(INDIRECT("1:"&MAX(Data04)))^0)
感悟:“M法”中,构造MMULT函数的第一参数(数组),是本法的关键!把构造完成的MMULT函数的第一参数(数组)作为INDEX函数的第一参数,借助于SUMIF函数,应该也可以得到结果。(待本鸟发帖!)

高级魔术玩的是功夫!你看到了结果,但是你不知道是怎么变出来的!甚至(如上),一步一步把中间过程拆解给你看个明白透顶,你也不会变。
真是“台上一分钟,台下十年功”啊!


TA的精华主题

TA的得分主题

发表于 2016-2-19 16:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 e表格学习 于 2016-2-19 16:20 编辑

1
2
1
2
3
1
2
=SUM(INDEX(N(ROW(INDIRECT("1:"&SUM(Data04)))>=LOOKUP(ROW(INDIRECT("1:"&SUM(Data04))),Data05)+COLUMN(INDIRECT("C1:C"&MAX(Data04),0))-1),ROW(INDIRECT("1:"&SUM(Data04))),))
本帖完成楼上的承诺了。但是,请注意几个问题:
1、因为INDEX返回的虚拟内存数组不是“引用”,而SUMIF函数第一参数必须为引用,所以只能换成SUM函数;
2、同理,因为所构造的内存数组不是“引用,”不存在“引用基点”,所以式中INDEX不能代之以OFFSET;
3、此处由SUM函数得到的结果,在内存中并不存在(“抹黑、F9”可以看到),从这一点来说,还是MMULT解法比较“先进”;
4、本题只想说明,MMULT不是必须的,而重要的是构造出那个内存数组!!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-8 11:28 , Processed in 0.026063 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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