ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-8-1 22:29 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组公式
原帖由 zhanhewang 于 2009-5-7 18:11 发表

用行数乘1000是为了在排列时上面的行始终在前面。SMALL(     ,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7)是利用SMALL函数将原数从小到大组排成一个8*7的数组。用RIGHT取出原数,加--变成数字。
高手,学习学习。 ...

请问一下:为什么*1000就是上面的行始终在前面,不明白呀。
         后面是怎么排成8*7的数组的,看不明白,请你再给我讲详细点好吗?
         还有RIGHT的最后一个参数,我试了一下,1和2都可以,为什么是3?

TA的精华主题

TA的得分主题

发表于 2009-8-1 22:45 | 显示全部楼层
全部公式是这样的,位于本帖7楼
=--RIGHT(SMALL(ROW(A2:G9)*1000+A2:G9,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),3)

TA的精华主题

TA的得分主题

发表于 2009-8-1 23:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zoubo604 于 2009-8-1 22:45 发表
全部公式是这样的,位于本帖7楼
=--RIGHT(SMALL(ROW(A2:G9)*1000+A2:G9,COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7),3)


为什么*1000就能正常排序呢?是这样的,ROW(A2:G9)这个公式是为了返回{2;3;4;5;6;7;8;9}的一个数组,当然Row(A2:G9)也可以用其他写法代替,比如row($2:$9),在此题中row($1:$8)也可以,只是写法问题,不影响功能实现。row(A2:G9)*1000后,返回{2000;3000;4000;5000;6000;7000;8000;9000},这样再+A2:G9,就能保证在后面small的时候,第一排的数据最小,第二排的数据第二小。。。。以此类推,另外在此题中,right(,1)还是right(,2)都是没关系的,因为只需要取出四位数的个位,但是若要考虑到通用性,及排序的数据源可能变成三位数,二位数,所以用right( ,3)较为通用。。。。。。。。。。。。。不知道我讲清楚了没。

TA的精华主题

TA的得分主题

发表于 2009-8-1 23:22 | 显示全部楼层

感谢

这个问题讲清楚了,还有个问题:
为什么后面是COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7
这里看不懂
谢谢

TA的精华主题

TA的得分主题

发表于 2009-8-2 04:29 | 显示全部楼层
这个贴子我看了好几次,真的非常感觉胡老师,每次都是只看了一部分就要停下来慢慢琢磨才明白,所以一直都没有赶上,交一下217楼的作业,--RIGHT(SMALL(CHOOSE(COLUMN(A:G),A2:A9,C2:C9,E2:E9,G2:G9,I2:I9,K2:K9,M2:M9)+ROW(1:8)*1000,(ROW(1:8)-1)*7+COLUMN(A:G)),3)

TA的精华主题

TA的得分主题

发表于 2009-8-2 07:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zoubo604 于 2009-8-1 23:22 发表
这个问题讲清楚了,还有个问题:
为什么后面是COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7
这里看不懂
谢谢

COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7 在公式里摸黑 按F9试试
返回的是7行7列的一个数组,数组运算是先行后列,你自己琢磨一下,可以简单的试一下ROW(1:2)+COLUMN(A:B),看看返回什么

TA的精华主题

TA的得分主题

发表于 2009-8-2 09:42 | 显示全部楼层
521-530楼怎么是511-520楼的翻版?呵呵!我在531楼。
贴子发后再看时已经正常了。是系统暂时出了小故障吧。呵呵!

[ 本帖最后由 雪儿浪漫想 于 2009-8-2 12:23 编辑 ]
翻版?.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-2 13:20 | 显示全部楼层

回复 529楼 fanbo0622 的帖子

恩,细细消化是好的,求慢不求快,慢就是快。

另,这几天实在太忙了,作业看不过来了,呵呵。
大家一起先讨论吧,我想很多人都很厉害了,呵呵。

TA的精华主题

TA的得分主题

发表于 2009-8-2 14:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-3 11:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 zoubo604 于 2009-8-1 23:22 发表
这个问题讲清楚了,还有个问题:
为什么后面是COLUMN($A:$G)+(ROW($A$2:$G$9)-2)*7
这里看不懂
谢谢


      对于利用ROW()和COLUMN()函数来返回常量数组,刚开始时我也很迷惘,但看了别人的答案又觉得自己很笨!
鉴于自己走过的弯路,所以建议新同学们可以将本贴中看到的生成常量数组的一些基本公式基本用法做笔记记录下来,不时去回味学习,相信会有进步
我自己也记录了不少,分享如下:


   1、取1~6之间的偶数:可参考 ROW(1:3)*2

   2、取1~6之间的奇数:可参考 ROW(1:3)*2-1

   3、要得到{1000;100;10;1}:10^(ROW(1:4)-1),若想横向排列,则用COLUM;

   4、要得到{1;1;1;1;1}:可用ROW(1:5)^0

   5、要得到{1,1,1;2,2,2;3,3,3}:可用:=IF(MOD(ROW(1:9),3)=0,ROW(1:9)/3,INT(ROW(1:9)/3+1))
   6、 要得到{1,2,3;4,5,6;7,8,9}:可用COLUMN(1:3)+(ROW(1:3)-1)*3.如果要得到的结果为更多行更多列,只要对公式稍做修改就可以了.

   7、要得到{0;6}: =    (ROW(1:2)-1) *6


   8、再补充一个,要得到{1,2,3;2,3,4;3,4,5}:可用=COLUMN(A:C)+(ROW(1:3)-1).这个是在解INDEX麻花型数组变形时学到的.

    今天笔记本不在身边,所有还有一些忘记了,没办法全部发上来。不过,我想很多时候只要对上面那么公式稍做变换,就能得到自己想要的常量数组的,关键是积累和灵活运用。


PS:标记下,看到了28页.进度还是很慢,最近很没时间

[ 本帖最后由 美人计 于 2009-8-26 20:33 编辑 ]

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-9-29 10:25 , Processed in 0.045599 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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