ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 函数与公式 > 【竞赛题】如何从一个常量数组中截取指定行列的子数组?

【竞赛题】如何从一个常量数组中截取指定行列的子数组?

作者:绿色风 分类: 时间:2022-08-18 浏览:151
楼主
rongjun
【题目】
如何从一个常量数组中截取指定行列的子数组?
已知常量数组X(已定义为名称),在单元格中显示如A1:L10单元格区域所示。
请按照B12:B15单元格指定行、列数从常量数组X中截取子数组,生成新的内存数组。

【要求】
1、用函数公式完成,不定义名称(常量数组X除外)。
2、公式中引用B12:B15单元格以外的单元格区域视为使用了辅助区域(引用行列号除外)。
3、公式具备通用性,即当常量数组X变化时,或B12:B15单元格区域数值变化时,都能够得到相应的正确结果。
4、答题区域为A18:L27单元格区域。

【评分】
1、使用辅助区域,且得出正确答案,得3技能分,精彩答案可再获得1-3技能分;
2、不使用辅助区域,且得出正确答案者得8技能分,精彩答案可再获得1-5技能分。

【期限】
2011-03-15

 

如何从一个常量数组中截取指定行列的子数组?__题目.rar
2楼
amulee
先给个,想到其他再说,要辅助区域,就是给出的那个
  1. =OFFSET(A1,B12-1,B13-1,B14,B15)
3楼
鬼狐
=INDEX(X,N(IF(1,ROW(INDIRECT(B12&":"&(B12+B14-1))))),N(IF(1,COLUMN(INDIRECT(CHAR(64+B13)&":"&CHAR(63+B13+B15))))))
4楼
wcymiss
  1. =INDEX(X,ROW(INDIRECT(B12&":"&B12+B14-1)),COLUMN(INDIRECT("c"&B13&":c"&B13+B15-1,)))

  1. =INDEX(X,N(IF(1,ROW(INDIRECT(B12&":"&B12+B14-1)))),N(IF(1,COLUMN(INDIRECT("c"&B13&":c"&B13+B15-1,)))))
5楼
Zaezhong
辅组列方法:
  1. =INDIRECT("R"&$B$12+ROW(A1)-1&"C"&$B$13+COLUMN(A1)-1,)
  1. =IF((ROWS($A$18:A18)>$B$14)+(COLUMNS($A$18:A18)>$B$15),"",INDEX(X,$B$12+ROW(A1)-1,$B$13+COLUMN(A1)-1))
6楼
piny
选取A18至L27

=INDEX(A1:L10,ROW(INDIRECT(B12&":"&B12+B14)),TRANSPOSE(ROW(INDIRECT(B13&":"&B13+B15))))



=INDEX(X,ROW(INDIRECT(B12&":"&B12+B14)),TRANSPOSE(ROW(INDIRECT(B13&":"&B13+B15))))

数组
7楼
laowuwyx
多单元格数组公式。
  1. =IFERROR(INDEX(A1:L10,N(IF(1,ROW(INDIRECT("c"&B12&":c"&B12+B14-1)))),N(IF(1,COLUMN(INDIRECT("c"&B13&":c"&B13+B15-1,))))),"")

如何从一个常量数组中截取指定行列的子数组?__题目.rar
8楼
悟空师弟

公式:
  1. =INDEX(X,ROW(1:10)+B12-1,COLUMN(A:L)+B13-1)


如何从一个常量数组中截取指定行列的子数组?__题目.rar


结果并非B12:B15所指定的行数和列数,只是用条件格式完成那样的效果,不知道算不算。
荣版的题目文件中有条件格式:=OR(ROW()-17>$B$14,COLUMN()>$B$15)*(COUNTA(A18)<>0)
9楼
gouweicao78
  1. =INDEX(X,N(IF(1,ROW(INDIRECT(B12&":"&B12+B14-1)))),N(IF(1,COLUMN(INDIRECT("C"&B13&":C"&B13+B15-1,0)))))
10楼
tntpai
=INDEX(X,N(IF(1,ROW(INDIRECT("1:"&$B$14))+$B$12-1)),N(IF(1,COLUMN(INDIRECT("a:"&CHAR(64+$B$15)))+$B$13-1)))
现学现用
11楼
wjc2090742
大家回复的好快啊。比较直接的思路,右拉下拉:
  1. =IF(OR(ROW(A1)>$B$14,COLUMN(A1)>$B$15),"",INDEX(X,ROW(A1)-1+$B$12,COLUMN(A1)-1+$B$13))
12楼
liuguansky

堆积木解法。


如何从一个常量数组中截取指定行列的子数组?__题目.rar
13楼
zm0115
  1. =IF(OR(ROW(A1)>$B$14,COLUMN(A1)>$B$15),"",INDEX(OFFSET($A$1,$B$12-1,$B$13-1,$B$14,$B$15),ROW(A1),COLUMN(A1)))


有点小长
如何从一个常量数组中截取指定行列的子数组?__zm0115.rar
14楼
foodorwater
如何从一个常量数组中截取指定行列的子数组?__题目.zip
15楼
tldrtnnhtg
=OFFSET(A1,B12-1,B13-1,B14,B15)  这个题我有点迷惑  按照这样的要求,只要用OFFSET函数,引用B12到B15  作为偏移量就可以达到目的了呀 不知道是不是我理解错了
16楼
liuguansky
  1. =INDEX(A1:L10,N(IF(1,ROW(INDIRECT(B12&":"&B12+B14-1)))),N(IF(1,TRANSPOSE(ROW(INDIRECT(B13&":"&B13+B15-1))))))
n+IF真是个伟大的创新啊。
17楼
rongjun
本题的考点就是piny网友发现的INDEX+N+IF新用法,使得index函数生成内存数组成为可能,解决了内存数组截取子数组的难题。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap