ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-25 17:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组公式
smlee 发表于 2011-10-25 16:07
哎呀,前面学了这么多,居然卡在最后这道题上。。。气愤之余又无可奈何。。。

试着按答案的公式去扩展 ...

不需要在TEXT上纠缠,直接看第二部分吧

TA的精华主题

TA的得分主题

发表于 2011-10-26 17:02 | 显示全部楼层
练拳不练功,到老一场空。从1楼用了2天的时间到了33页‘发现行路难。然后跳回一楼。
用了4天的时间,到了17页,170楼。
打算明天再从1楼重新出发!
数组的趣味无穷,真的趣味无穷。
慢慢磨吧!

TA的精华主题

TA的得分主题

发表于 2011-10-26 17:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-28 11:31 | 显示全部楼层
本帖最后由 smlee 于 2011-10-28 11:37 编辑

214楼的作业
=IF({1,1,1,1,0,0,0},IF({1,1,1,0},IF({1,1,0},IF({1,0},A2:A9,C2:C9),E2:E9),G2:G9),IF({1,1,1,1,1,1,0},IF({1,1,1,1,1,0},I2:I9,K2:K9),M2:M9))
这个公式是参照某楼层前辈的公式做的,虽然自己想不出,但基本了解了。
我理解是,第一个 if 先把合拼数组区域分为两部份,而我这里第一部分有4列的区域
                  第二个 if开始判定 第一部分里面的值,看是否前3列有值,第4列没有值,如果是则进入第三个判定,如果不是则附值
                  第三个,第四个判定同理。
                  第五个IF开始判定下半部分,下半部分只有3列,但是整个区域一共有7列,所以要把前面的列一起判定,这里的判定则要假设前面4列的值已经存在,然后判断后三列。。。可能表述得不是很好,不过我理解就是这个意思。

=RIGHT(SMALL(ROW(1:8)*10+合拼数组,(ROW(1:8)-1)*7+TRANSPOSE(ROW(1:7))),1)
最后一步就是这个。。之前学过的。。。也没有太大进步空间。。。

TA的精华主题

TA的得分主题

发表于 2011-10-28 12:04 | 显示全部楼层
不过我后来想了一种更简单的方法,不知道算不算完成
=INDEX(A2:M9,ROW(1:8),{1,3,5,7,9,11,13})

点评

这个不能生成有好的内存数组,就是当参数传递给外层时不能完整的传递。  发表于 2011-10-28 14:59

TA的精华主题

TA的得分主题

发表于 2011-10-28 14:51 | 显示全部楼层
本帖最后由 smlee 于 2011-10-29 14:20 编辑

太好玩了。。然后又研究了个
=IF(MOD(TRANSPOSE(ROW(1:8)),2),A2:M9,OFFSET(A2:A9,,8)) 虽然顺序乱了,但并不影响最后一步操作


原来这个公式是错的- -,我真是傻子,哈哈~

TA的精华主题

TA的得分主题

发表于 2011-10-29 15:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
胡剑0227 发表于 2009-5-8 22:54
在上图L4:O6中的数组公式如下
=IF((COLUMN(A:D)+4*(ROW(1:3)-1))^0,OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1) ...

胡版,IF(1,这个袋子,我发现了可以自适应,
上面的公式改为:
  1. =IF(1,OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1)-1,),)
复制代码
仍然正确,哈哈。

点评

呵呵,是呀,一个是网格,一个是直接铺了一张纸,哈哈  发表于 2011-10-29 15:41

TA的精华主题

TA的得分主题

发表于 2011-10-29 15:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 hustnzj 于 2011-10-29 15:33 编辑
胡剑0227 发表于 2009-5-8 22:54
在上图L4:O6中的数组公式如下
=IF((COLUMN(A:D)+4*(ROW(1:3)-1))^0,OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1) ...


还发现了改成:
  1. =T(OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1)-1,))
复制代码

也可以落地。{:soso_e128:}(当然这个法子没有上面那个好)

TA的精华主题

TA的得分主题

发表于 2011-10-29 15:52 | 显示全部楼层
胡剑0227 发表于 2009-5-8 22:54
在上图L4:O6中的数组公式如下
=IF((COLUMN(A:D)+4*(ROW(1:3)-1))^0,OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1) ...

但我发现了另一个问题:IF(1,  方式返回的按F9只能显示A;胡版的方法显示的是{"A","A","A","A";"A","A","A","A";"A","A","A","A"},而只有T(OFFSET(A1,COLUMN(A:D)+4*(ROW(1:3)-1)-1,))才可以显示出正确的内存数组{"A","B","C","D";"E","F","G","H";"I","J","K","L"}。
这个又是什么原因呢?

TA的精华主题

TA的得分主题

发表于 2011-10-29 17:04 | 显示全部楼层
胡剑0227 发表于 2009-5-17 14:14
231楼点评和补充作业。

模块化思想,思路清晰,稳扎稳打。

=CONCATENATE("-",A2:A9,"-",C2:C9,"-",E2:E9,"-",G2:G9,"-",I2:I9,"-",K2:K9,"-",M2:M9,"-")

=MID(合拼,FIND("#",SUBSTITUTE(合拼,"-","#",TRANSPOSE(ROW(1:7))))+1,FIND("#",SUBSTITUTE(合拼,"-","#",TRANSPOSE(ROW(2:8))))-FIND("#",SUBSTITUTE(合拼,"-","#",TRANSPOSE(ROW(1:7))))-1)

再次试验成功!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-6 10:39 , Processed in 0.042771 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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