ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-23 21:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组公式
谢谢月亮MM和weifaxiang
向shaowu459前辈学习。已修改。
做这些题目,每走一步都离不开版主和各位师兄、师姐的帮助。
本题刚开始做时是斗大的馒头无从下手。好困惑。后想想,先把二维数组改为一维。再用substitute把其中的1,2,3,,9换成"",接着用len()计算换后剩余的长度(长度比9小几,表示原数中有几个)。用mmult()将其组成一个多位数。到这里时又卡壳了。因为countif()无法发挥作用。
参考几位师兄师姐后,才找到办法。
我的办法得到的中间数组没有各位的直观、好理解。

更新数组稍微改了一下:
=MMULT(--LEN(SUBSTITUTE(一列数组,COLUMN(Sheet1!$A:$I),"")),10^TRANSPOSE((9-COLUMN(Sheet1!$A:$I))))

这里 LEN+SUBSTISTUTE的应用从模式是上讲就是模式5,整个MMULT就是模式7。


[ 本帖最后由 胡剑0227 于 2009-5-24 16:01 编辑 ]

思维的突破剔除公式-wzh.rar

6.08 KB, 下载次数: 91

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-5-23 21:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
就从胡版的这道题来说吧。
我一开始看到题目的要求,和大家的想法都是一样的。先把它转换成数字从小到大的新数组,然后统计次数应该就方便了。所以这道题分两步走,第一步:转换成新的数组。我一开始的想法是保持原有数组维度不便,然后用COUNTIF统计次数。(当时忘了COUNTIF的第一参数必须是单元格引用,这个想法给我后面造成了很大的麻烦)此时我想到了我第一阶段所学到的知识,用MMULT(SMALL+MID)就可以实现一列。而对于二维的数组,除非参数是第三维的(说法不规范,不知道大家是否明白我的意思),否则没有办法一步实现。于是就尝试分四列分别实现,然后再用到第二阶段学习的数组合并的方法,将四列合并成与原始数据同维度的数组。这里我使用的是CHOOSE。至此,第一步完成。第二步只需要将第一步得到的数组计数一下就可以了,貌似非常的简单。但是当我用COUNTIF的时候悲剧发生了。EXCEL直接死掉,关掉重开,自动恢复,又死掉了,最后还是ESC回来的。我突然想到COUNTIF第一参数不能引用数组,那如何计数?我想到了MMULT。但是我也只知道MMULT一维计数的方法,也就是说需要将之前完成的四列并成一列。这在技术已经不是什么难事了,之前的第二阶段刚刚练习过,同样可以CHOOSE。这样我就得到了一列次数组成的数组,怎么转换成原始数据的维度?我想起来第一阶段学习的LOOKUP实现数组变形。第一遍做出来的结果和版主题目上面显示的结果是一样的,但是这个结果是有点问题的。我把按行排改成了按列排就得到正确的结果。(正是因为这样我才冒昧的猜测版主是不是也和我一样在这里没有按列排,呵呵)在检查的时候,我突然想到既然最后要用一列来计数,那何不一开始就先变成一列再处理数据呢?于是我优化了一下过程,发现逻辑性清晰了很多。
写得这么乱,总结一下。我的心得和前面有位高手提到的一样,看到问题,先分析流程,再细化到步骤,再决定用什么函数去实现。从结果出发,逆向思维。另外,问题解决以后,自己再理一下过程,看看是不是可以有精简的地方,是不是需要改进的地方。当然,整理一下流程最重要还是一种思维方式的提炼,以后遇到类似的问题就有了所谓的“经验”了。这一点非常的重要。
写了半天好像没有提到有关数组的思维,呵呵。和大家分享一下这十几天的收获,大家见笑了!

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-5-23 22:09 | 显示全部楼层
回胡版主402楼。
模式5:通常用在由一维数组构成二维数组时;模式7:通常用于求二维数组各行(列)的和。
肤浅理解,大家见笑。呵呵。

TA的精华主题

TA的得分主题

发表于 2009-5-23 22:15 | 显示全部楼层
原帖由 zhanhewang 于 2009-5-23 21:30 发表
谢谢月亮MM和weifaxiang
向shaowu459前辈学习。已修改。
做这些题目,每走一步都离不开版主和各位师兄、师姐的帮助。
本题刚开始做时是斗大的馒头无从下手。好困惑。后想想,先把二维数组改为一维。再用substitu ...

虽然这种用法以前见过,但是还没有把原理看懂,更谈不上使用了。呵呵,我只能现学现用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-24 14:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zhanhewang 于 2009-5-23 22:09 发表
回胡版主402楼。
模式5:通常用在由一维数组构成二维数组时;模式7:通常用于求二维数组各行(列)的和。
肤浅理解,大家见笑。呵呵。



呵呵,我是这么理解的,模式5 把一维数组变成二维数组,这是表面现象,其实里面是带着任务的,这里的任务一般是 提取一个列(行)数组的某一特性。如果公式为 列数组1=行数组1 ,那么结果二维数组的每一行代表了 列数组1 的对应元素 和 行数组1的每个元素是否相同的进行了标记。
而模式7 一般是和模式5配套的,把上诉二维数组的每一行进行累计和,就实现了类似COUNTIF的功能。

模式5 加 模式7 不但完成了对一维数组某个特性的统计,而且又回到了一维状态,起到降维德作用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-24 15:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
404楼weifaxiang 兄提到“而对于二维的数组,除非参数是第三维的(说法不规范,不知道大家是否明白我的意思),否则没有办法一步实现。”

呵呵,第三阶段,我附件的名称定为思维的突破,当时想的就是这里,看看大家需要“三维”(不知道有没有,反正我不知道,如果有可能是那个sheet方向的吧)来解决而Excel又不提供时大家会怎么选择,是否会选择 降维 ,技术实现上是简单的多列转化为一列,但思维层次上应该称为降维

在某个楼层吧,我在叫嚣:二维比一维不仅仅多了一维,而是多了全部,指的就是这个意思,当大家感觉需要三维时就先降维。二进制数只有0和1它可以表示任何数,IF函数只有TRUE和FALSE的选择,但可以表达任何多的条件,EXCEL虽然只提供了二维,但由于二维可以降维为一维,因此通过一维→二维→一维→二维的不断转化,就能处理任何维数的问题

[ 本帖最后由 胡剑0227 于 2009-5-24 17:13 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-5-24 15:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 胡剑0227 于 2009-5-24 14:54 发表



呵呵,我是这么理解的,模式5 把一维数组变成二维数组,这是表面现象,其实里面是带着任务的,这里的任务一般是 提取一个列(行)数组的某一特性。如果公式为 列数组1=行数组1 ,那么结果二维数组的每一行代表 ...

版主理解的深刻。我以前也只是依葫芦画瓢的使用,具体的原理也没有深想过。版主说如果公式为 列数组1=行数组1 ,那么结果二维数组的每一行代表了 列数组1 的对应元素 和 行数组1的每个元素是否相同的进行了标记。从另一个角度看,结果二维数组的每一列也对行数组1的对应元素和列数组1的每个元素是否相同
进行的标记。所以通过类似模式7的处理也可以得到一个列数组。

TA的精华主题

TA的得分主题

发表于 2009-5-24 22:01 | 显示全部楼层
在版主的引领下,不知不觉走过了不少山路。有曲折,有迂回;有迷茫,有惊喜。猛一回头,真有点成就感。谢谢版主,谢谢班长!!

TA的精华主题

TA的得分主题

发表于 2009-5-25 00:25 | 显示全部楼层

我的猜想。。。

想了很久。。。现在只能做到这里。。。两个离散列间插,还必须用个辅助单元格才能实现。
以后再继续想这个问题吧。。。
我希望达到的目的是不用辅助单元格,也能实现效果,现在还没想出来。
有兴趣的同学可以一起想一下其他的办法实现离散列间插吧。。。

[ 本帖最后由 moon2778 于 2009-5-25 00:39 编辑 ]
离散列间插.jpg

我的猜想.rar

2.88 KB, 下载次数: 68

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-25 09:30 | 显示全部楼层
循环过瘾了,呵呵

主要你脑子钻到循环里去了,这个问题还是比较简单的,至少是不难的,先把思路想好再写函数。

[ 本帖最后由 胡剑0227 于 2009-5-25 10:07 编辑 ]
间隔插入.jpg

我的猜想间插.rar

3.69 KB, 下载次数: 172

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

本版积分规则

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

GMT+8, 2024-12-25 00:54 , Processed in 0.036426 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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