Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8146|回复: 36

第四期函中班入学考试题

  [复制链接]
发表于 2011-2-20 10:20 | 显示全部楼层 |阅读模式
四期函中入学考试题见附件。
答题请跟贴,本贴回贴是作者可见,所以不需要设置回复可见。
函入毕业的,提供上期毕业证明链接跟贴即可。(不过仍是建议自己做一下,如果这个题都做不下来,函中很难混的……)
水贴扣分,见谅!

PS,这是入学题,不是毕业题,不要想太难,按照题目要求做即可。
另外,请注意公式的扩展性,用IF套层的方法扩展性太差,不是函数解题的思路。

2011年3月18日开班,此贴同时结贴,此后再跟贴者仅供娱乐。


入学题.xls

32 KB, 下载次数: 334

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-2-20 11:21 | 显示全部楼层
=INDIRECT(TEXT(INT(ROW(A10)/10),"[DBNum1]")&"!R"&MOD(ROW(A10),10)+1&"C"&COLUMN(A10),)
利用TEXT得到工作表名一二三,利用MOD得到1-10的行号,然后得到1-5的列号 再用INDIRECT的RC格式得到单元格内容  简单公式我不会

评分

参与人数 1 +1 金币 +1 收起 理由
小妖 + 1 + 1 通过

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 13:31 | 显示全部楼层
=INDEX(CHOOSE(IF(ROW()-7<=COUNTA(一!$A:$A),1,IF(ROW()-7<=COUNTA(一!$A:$A)+COUNTA(二!$A:$A),2,3)),一!$1:$65536,二!$1:$65536,三!$1:$65536),IF(ROW()-7<=COUNTA(一!$A:$A),ROW()-7,IF(ROW()-7<=COUNTA(一!$A:$A)+COUNTA(二!$A:$A),ROW()-7-COUNTA(一!$A:$A),ROW()-7-COUNTA(一!$A:$A)-COUNTA(二!$A:$A))),COLUMN())

思路:
1、我用index函数从三个表里面取数,index(区域,行,列)
2、Index函数的第一个参数是索引区域,我们需要将这个区域变成动态的,那么可以用choose函数
3、choose的第一个参数我们必须让它动起来,因而公式所在的行行数减7(即ROW()-7)小于第一个表的数据行数的话,我们取第一个表的整个区域,如果:当前行标-7<第一个表的行数+第二个表的行数,那么我们取第二个表的区域,否则我们取第三个表的区域
   即index函数的区域部分为:CHOOSE(IF(ROW()-7<=COUNTA(一!$A:$A),1,IF(ROW()-7<=COUNTA(一!$A:$A)+COUNTA(二!$A:$A),2,3)),一!$1:$65536,二!$1:$65536,三!$1:$65536)
4、定义好了index的区域,那么我们要定义index函数的行,同样的道理,对于不同的表取数,我们对于行要进行类似的处理:
IF(ROW()-7<=COUNTA(一!$A:$A),ROW()-7,IF(ROW()-7<=COUNTA(一!$A:$A)+COUNTA(二!$A:$A),ROW()-7-COUNTA(一!$A:$A),ROW()-7-COUNTA(一!$A:$A)-COUNTA(二!$A:$A)))
公式所在的行行数减7(即ROW()-7)小于第一个表的数据行数的话,index的行=当前行标-7,如果:当前行标-7<第一个表的行数+第二个表的行数,那么index的行=当前行标-第一个表的数据行数-7,否则index的行=当前行标-第一个表的数据行数-第二个表的数据行数-7
5、Index的列等于当前公式所在列的列数即可。

点评

公式要有可扩展性,比如求A1:A5的和,如果用=A1+A2+A3+A4+A5,就完全没有扩展性,区域变成A1:A50时就要在后面输入无数内容,而用SUM(A1:A5)区域改了,只要在参数上稍作改动即可。再努力一下。  发表于 2011-2-20 14:08
回复

使用道具 举报

发表于 2011-2-20 13:45 | 显示全部楼层
=INDIRECT(TEXT(INT((ROW()+2)/10),"[DBNUM1]")&"!R"&MOD(ROW()-8,10)+1&"C"&COLUMN(),)
前面三个表都是10行数据,利用这一点利用INDIRECT函数从中取出数据。TEXT函数将INT函数的结果转化为中文数字,使其与工作表名一致。

评分

参与人数 1 +1 金币 +1 收起 理由
小妖 + 1 + 1 通过

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 14:11 | 显示全部楼层
本帖最后由 9lee 于 2011-3-4 14:45 编辑

  1. =IF(ROWS(二!A$1:A1)-COUNTA(一:二!A:A)>0,OFFSET(三!A$1,ROWS(三!A$1:A1)-COUNTA(一:二!A:A)-1,),IF(ROWS(二!A$1:A1)-COUNTA(一!A:A)>0,OFFSET(二!A$1,ROWS(二!A$1:A1)-COUNTA(一!A:A)-1,),一!A1))
复制代码


说明:
1 根据题意,设定三种情况下分别引用三个工作表的数据
2 第一种情况,引用第一个工作表数据:一!A1。
3 第二种情况,ROWS(二!A$1:A1)-COUNTA(一!A:A)>0,引用第二个工作表数据OFFSET(二!A$1,ROWS(二!A$1:A1)-COUNTA(一!A:A)-1,)。
4 第三种情况,ROWS(二!A$1:A1)-COUNTA(一:二!A:A)>0,引用第三个工作表数据OFFSET(三!A$1,ROWS(三!A$1:A1)-COUNTA(一:二!A:A)-1,)。



重新做过了,公式比较长,数组公式(按三键):
  1. =IF(ROW(A1)>COUNTA(一:三!A:A),"",OFFSET(INDIRECT(LOOKUP(ROW(A1)-1,MMULT(N(ROW(1:3)>TRANSPOSE(ROW(1:3))),SUBTOTAL(3,(INDIRECT({"一";"二";"三"}&"!a:a")))),{"一";"二";"三"})&"!a1"),ROW(A1)-1-LOOKUP(ROW(A1)-1,MMULT(N(ROW(1:3)>TRANSPOSE(ROW(1:3))),SUBTOTAL(3,(INDIRECT({"一";"二";"三"}&"!a:a"))))),COLUMN(A1)-1))
复制代码
说明:
1 还是用我比较喜欢的offset。
2 第一参数:各表的a1单元格
  1. INDIRECT(LOOKUP(ROW(A1)-1,MMULT(N(ROW(1:3)>TRANSPOSE(ROW(1:3))),SUBTOTAL(3,(INDIRECT({"一";"二";"三"}&"!a:a")))),{"一";"二";"三"})&"!a1")
复制代码

3 第二参数:行位移
  1. ROW(A1)-1-LOOKUP(ROW(A1)-1,MMULT(N(ROW(1:3)>TRANSPOSE(ROW(1:3))),SUBTOTAL(3,(INDIRECT({"一";"二";"三"}&"!a:a")))))
复制代码

4 第三参数:列位移

  1. COLUMN(A1)-1
复制代码
5  当工作表有增减或移动时,可以修改:
  • COUNTA(!A:A)中的“一:三”表示需要合并的第一个工作表和最后一个工作的名称,有增减或位置移动时需要修改
  • ROW(1:3)中的3代表工作表个数,有n个工作表,就改成n
  • {"一";"二";"三"}是所有需要合并的工作表名称,有增减时需要修改

6 不能用名称,不能用辅助列,不能用技巧,07中还不能用宏表函数……还要有延展性,所以,对我来说,这个题目有点难度,不知我这样的基础能不能学中级{:241:}

点评

想复杂了,所以才会觉得难,其实一个普通函数就可以解决了。  发表于 2011-3-4 19:29

评分

参与人数 1 +1 金币 +1 收起 理由
小妖 + 1 + 1 可以通过,不过真的是想复杂了。

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 14:15 | 显示全部楼层
交作业
=INDIRECT(LOOKUP(ROW(A1),{1,11,21},{"一","二","三"})&"!R"&(MOD(ROW(A10),10)+1)&"C"&COLUMN(A1),FALSE)

说明:
用indirect 的R1C1-格式引用三个表内的数据,因为三个表内都是十行五列的数据所以比较有规律
先用lookup查找表名
再找出行列规律,利用row和column拖动的规律。

只会做题,不会解释诶,嘴巴比较笨

评分

参与人数 1 +1 金币 +1 收起 理由
小妖 + 1 + 1 用LOOKUP的办法扩展性差点,不过整体思路还.

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 14:24 | 显示全部楼层
=IF(AND(ROUNDUP((ROW()-7)/10,)=1,COLUMN()<6),INDIRECT("一!r"&MOD(ROW()-8,10)+1&"C"&COLUMN(),),IF(AND(ROUNDUP((ROW()-7)/10,)=2,COLUMN()<6),INDIRECT("二!r"&MOD(ROW()-8,10)+1&"C"&COLUMN(),),IF(AND(ROUNDUP((ROW()-7)/10,)=3,COLUMN()<6),INDIRECT("三!r"&MOD(ROW()-8,10)+1&"C"&COLUMN(),),"")))
我的公式比较长哈。不过除了没达到“用最简洁的公式”这条外,其它要求好象都达到了
公式解释:
思路:if(条件一成立,取表一数据,if(条件二成立,取表二数据,if(条件三成立,取表三数据,否则为空)))
AND(ROUNDUP((ROW()-7)/10,)=1,COLUMN()<6),用IF函数判断ROUNDUP((ROW()-7)/10,)是否等于1以及列号是否小于6,条件同时成立,用inditect()取“一”中的数据。
INDIRECT("一!r"&MOD(ROW()-8,10)+1&"C"&COLUMN(),):MOD(ROW()-8,10)+1引用的行号。

点评

公式要有可扩展性,比如求A1:A5的和,如果用=A1+A2+A3+A4+A5,就完全没有扩展性,区域变成A1:A50时就要在后面输入无数内容,而用SUM(A1:A5)区域改了,只要在参数上稍作改动即可。  发表于 2011-2-20 15:05
回复

使用道具 举报

发表于 2011-2-20 14:25 | 显示全部楼层
本帖最后由 海滨音诗 于 2011-2-20 15:24 编辑

再发一个短一些的公式:=INDIRECT(TEXT(ROUNDUP((ROW()-7)/10,)+1,"aaa")&"!r"&MOD(ROW()-8,10)+1&"C"&COLUMN(),)
没有除错。

TEXT(ROUNDUP((ROW()-7)/10,)+1,"aaa"),这个公式就是要得到“一”,“二”,“三”,text(1,"aaa")是得到星期日中的“日”,text(2,"aaa")才得到“一”,所以我就把原来的结果上再加上1。当然,这仅限表少的。
其它的上面已经做了解释。

评分

参与人数 1 +1 金币 +1 收起 理由
小妖 + 1 + 1 通过

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 15:43 | 显示全部楼层
过路学习一下,虽然我不能上函中,但我还是想学习一下。

评分

参与人数 1 -30 金币 -30 收起 理由
小妖 -30 -30 一楼写明灌水扣分

查看全部评分

回复

使用道具 举报

发表于 2011-2-20 15:45 | 显示全部楼层
回复 小妖 的帖子

请问老师第四期函中班入学考试题我为什么打不开呢。

点评

高中一年级以上可以报函中,请仔细阅读招生贴。http://www.excelpx.com/thread-159298-1-1.html  发表于 2011-2-20 16:00
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-7-1 07:26 , Processed in 0.284167 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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