ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-10 19:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组公式
内容很精彩,学习了。

TA的精华主题

TA的得分主题

发表于 2009-5-10 20:01 | 显示全部楼层
&"年"&"年"&"年"

TA的精华主题

TA的得分主题

发表于 2009-5-10 21:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 22:01 | 显示全部楼层
91楼作业,最好使用名称来替代单元格引用,体现内存数组的优越性

使用名称来承载内存数组是个绝好的主意,不仅可以轻松突破公式字符限制,对理清思路很有帮助。为实现模块化思想提供了物质基础。

[ 本帖最后由 胡剑0227 于 2009-5-10 22:05 编辑 ]
名称存储内存数组.png

提升数组意识进一步处理.rar

6.26 KB, 下载次数: 653

TA的精华主题

TA的得分主题

发表于 2009-5-10 22:04 | 显示全部楼层
原帖由 胡剑0227 于 2009-5-10 22:01 发表
91楼作业,最好使用名称来替代单元格引用,体现内存数组的优越性

我在92楼回答过了,呵呵。版主继续出题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 22:16 | 显示全部楼层
继续出题,进一步处理,呵呵,看图

顶楼,91楼,106楼 结合起来是解决一个复杂的问题。

每一个步骤实现相对是独立的,

比如顶楼 行排序,可以使用任何方式,只要最后的结果是符合要求的内存数组就可以。
91楼,以顶楼所得的内存数组作为参数输入,最后返回一列数字。具体实现可以任意。
106楼,以91楼的返回数组为参数进一步处理。

这里体现了模块思想,模块是相对独立的,只讲究 输入 和 输出,这里输入输出都是数组,所以只要数组正确就可以了,无需过问里面的具体实现。

模块思想的意义何在,大家尝试直接从顶楼到106楼的实现试试,即不用名称来承载内存数组,直接一个公式搞定试试,我想难度就大很多,编辑公式也容易出错。而且,一步到位实现公式对编写公式的能力和思维层次都会有更高的要求。

即尝试演练107楼的实现

107楼完成后请 悟 126楼的话。写在这里,奖励有韧性的同学,坚持,韧性是成为数组公式高手的必备素质。

[ 本帖最后由 胡剑0227 于 2009-5-11 10:46 编辑 ]
实现COUNTIF功能.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 22:31 | 显示全部楼层
尝试一次定性的方式,体会模块化得优点。
一定定型好比木雕印刷,模块化有活字印刷的味道,这个功能性相对独立的功能组件在很多问题中都是可以套用的。对各模块进行不同组合就能演变出新的函数公式。这好比练单式,单式练好了,把各招式重新编排就成新的套路了。

如果不是使用模块化思想,那么尝试解决同一问题,感觉一下是否难多了。关键在于要一次成型,而实际情况时思维能力不能一下子解决所有细节,模块化思想是解决问题的成熟思想,相信VBA编程也是一样的,呵呵


既然是体会一次成型的难度,请不要使用已生成的名称,不过不要太执着,目的只是体会不用模块化的不利性。我相信模块化解析后,这个问题,一步一步下来,相信大家都能解决,但直接碰到这个问题,我想可能会难倒很多同学吧。所以要模块化,解决问题第一性,不要太在意字符数什么。

[ 本帖最后由 胡剑0227 于 2009-5-11 08:08 编辑 ]
非模块化思想带来的难度.png

提升数组意识进一步处理.rar

6.26 KB, 下载次数: 678

TA的精华主题

TA的得分主题

发表于 2009-5-10 22:36 | 显示全部楼层
原帖由 胡剑0227 于 2009-5-10 22:31 发表
如果不是使用模块化思想,那么尝试解决同一问题,感觉一下是否难多了。关键在于要一次成型,而实际情况时思维能力不能一下子解决所有细节,模块化思想是解决问题的成熟思想,相信VBA编程也是一样的,呵呵

有点晕,呵呵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-10 22:38 | 显示全部楼层
阶段性总结:
1.讲解了一般函数数组应用的一般法则。
2.参数驱动,参数决定函数值,不仅是数值上,同样表现在构成数组的结构类型上。
3.模块化思想,分解问题难度,使用名称承载内存数组形成对立模块。

贴一个小技巧,需要在公式中输入名称时,可以按 F3 功能键,这样非常方便,也不易出错。
另一个重要知识
初学数组的同学可能对这个函数还是比较生疏的,这里略去很多的注意点不提(例如参数数组不能使逻辑值,要用N函数转化为0,1),主要提一下功能,或更准确的说是运算机制。

MMULT(array1(m行*n列),array2(n行*t列)),返回一个array3(m行*t列)

其中array3的 i 行 j 列元素是这样得到的:array1 的 i 行 数组 和 array2 的 j 列经转置后的数组 进行相乘 然后求和。

即 sum(array1 的 i 行 数组 *  transpose(array2 的 j 列)),数组公式。


[ 本帖最后由 胡剑0227 于 2009-5-10 22:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-10 22:51 | 显示全部楼层
原帖由 胡剑0227 于 2009-5-10 22:16 发表
继续出题,进一步处理,呵呵,看图

顶楼,91楼,106楼 结合起来是解决一个复杂的问题。

每一个步骤实现相对是独立的,

比如底楼 行排序,可以使用任何方式,只要最后的结果是符合要求的内存数组就可以。
9 ...

参照方版的MMULT用法,不知道对不对。

[ 本帖最后由 weifaxiang 于 2009-5-10 23:07 编辑 ]

提升数组意识进一步处理1.rar

6.52 KB, 下载次数: 587

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

本版积分规则

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

GMT+8, 2024-12-26 23:21 , Processed in 0.032704 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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