ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-10-12 14:00 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
今天感觉真累,占个位子先

TA的精华主题

TA的得分主题

发表于 2011-10-12 17:37 | 显示全部楼层
本帖最后由 胡剑0227 于 2011-10-14 09:03 编辑
胡剑0227 发表于 2011-10-12 13:30
呵呵,你能这么思考过不了多久就会豁然开朗的,我尝试做一下那个‘拨码开关“,呵呵。

对于第二个公 ...


这样的话,我明白了,是我理解的方向错了。

前面第一个练习中出现的这条公式
=--RIGHT(SMALL(ROW(A2:G9)*1000+A2:G9,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),3)
我尝试改为
=RIGHT(SMALL(ROW(A2:G9)*10+A2:G9,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),1)
这样也可以达到效果

这里有几个问题看得不是很明白
1,红色部分应该是用作输入吧?看了前面的解释“用行数乘1000是为了在排列时上面的行始终在前面”我不太明白这个结论是怎样得来的。因为每行都*1000,那么乘与不乘,似乎好像没关系。但实测,*10+A2:G9 这段没有了的话效果出来就不对了。
===================================================================
胡剑0227:
总体感觉呢,你还是没有以节拍,以一个一个循环的方式去理解,当然这是一个过程,呵呵。
A2:G9是输入,ROW(A2:G9)*10,可不是简单的每行乘以10,因为ROW(A2:G9)返回的是一个数组,各个元素值不同{2;3;4;5;6;7;8;9},因此对每一行的影响是不同的,下面的行加的10多,于是保证了下面的行要大于前面的行。这下明白了吧。


2,蓝色部位应该是用作输出吧?COLUMN($A:$G)写用column(1:7)应该也是可以的,这里作为返回列的参数。ROW($A$2:$G$9)-2)*7 这个应该可以写成 row((1:8)-2)*7,个人认为这样写比较好理解。只是有点不明白的地方,为什么要在行那里
"-2?"意思是从第二行开始吗?
==================================================================
胡剑0227:
蓝色部分是控制输出的,是SMALL函数的k参数部分。COLUMN(A:G)和column(1:7)返回值是不同的,可能在本例选中合适尺寸的单元格区域是结果相同,但你可以用F9去测试一下。COLUMN(1:7)应该和COLUMN(1:1)相同,这里恐怕是瞎猫碰到死老鼠巧了,哈哈。你再体会一个ROW(A1:C1) 和ROW(A1:C3)l两者也是相同的,呵呵。

明白了上面道理,你会发觉ROW((1:8)-2)*7 只是巧合了,当然依照你的意思,我们可以写成 transpose(row(1:7)-2)*7,你是这个意思吧,呵呵。
k参数的目的是为了建议个数组:{1,2,3,4,5,6,7;
                                                    8,9,10,...}



又好像不是。因为在第二个练习里面这条公式=LOOKUP((ROW(1:2)-1)*6+COLUMN(1:6),ROW(A:A),A:A)我理解为从选定单元格的第一行开始,这样理解又好像行得通。。不过跟第一次公式好似乎有矛盾了。。。所以很乱。。

烦请胡版为我解惑,本人资质愚钝,问题比较多,不要介意呀,哈哈~


点评

我先欠着,抽空尝试解答,不过你也可以吹吹我,怕到时又忘了,哈哈  发表于 2011-10-13 21:02

TA的精华主题

TA的得分主题

发表于 2011-10-12 23:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-13 10:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
享享福邪邪邪。

TA的精华主题

TA的得分主题

发表于 2011-10-13 22:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-14 12:09 | 显示全部楼层
本帖最后由 胡剑0227 于 2011-10-14 13:36 编辑
smlee 发表于 2011-10-12 17:37
这样的话,我明白了,是我理解的方向错了。

前面第一个练习中出现的这条公式


额,胡版,不知道是不是我太蠢了。。输入那部分还是不太明白
我知道ROW(A2:G9)*10是作为一个数组相乘,只是不理解{1,2,3,4,5;3,4,5,6,7}*10跟{1,2,3,4,5;3,4,5,6,7}的位置有差别吗?所以始终不明白为什么要相乘。
RIGHT(SMALL(ROW(A2:G9)*10+A2:G9,后面还要加上原来的值。。这个只是为了让RIGHT函数取值的话为什么不直接用A2:G9??我就差这点可以理解整个公式了。。。

输出部分,经过胡版您的解释再加上自己的反复测试,终于有种顿悟的感觉。我把自己想法说出来,让您评价下:
COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),原来COLUMN(A:G)和COLUMN(1:7)是差别这么大的,这部份作为新数组{1,2,3,4,5,6,7};这个是横向的数组
(ROW($A$2:$G$9)-2)*7 实测发现胡版说错了 row(A1:C1)和ROW(A1:C3)得出结果是不一样的。(胡剑:恩,心里想的是ROW(A1:A3)吧,不过搞不清了, 你理解了就好,哈哈)但是row(a1:c3)和row(1:3)是一样的。我终于明白为什么要-2,因为A2的行号为2要确保多维数组从1开始所以必须减去2,生成新数组{0;7;14;21;28;35;42}这个是纵向的数组
当两个数组相加会变成一个2维数组{1,2,3,4,5,6,7;8,9,10,11……50,51,52,53,54,55,56,57}而small函数的K参数是作为条件使用。。。也就是说最后结果会按照这个2维数组的坐标去生成数据。不知道我这样理解对不对?
胡剑0227:
是的,参数驱动么,参数的值以及空间排布都是返回值数组生成的依据

输入部分你再想想吧,用F9可以看看结果,可以帮助理解。

TA的精华主题

TA的得分主题

发表于 2011-10-14 14:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
加油,挣课券哦

TA的精华主题

TA的得分主题

发表于 2011-10-14 16:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
marked.

good good study day day up.

never give up.

thanks.

TA的精华主题

TA的得分主题

发表于 2011-10-14 17:14 | 显示全部楼层
有没有人能解释这个公式錒?

点评

这是公式吗,怎么没有=?,哈哈。  发表于 2011-10-14 17:19

TA的精华主题

TA的得分主题

发表于 2011-10-15 00:10 | 显示全部楼层
胡剑0227 发表于 2009-5-11 17:40
经市场反馈,这个故事收视率很高,所以上映了多个续集版本,目前续集已拍完,仿好莱坞大片,于是开始拍摄前 ...

认真看了前面的讨论,这道题只要一个步骤就可以了MID(A2:A9,COLUMN(A:G),1),今天受益颇多
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-6 08:38 , Processed in 0.052652 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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