Excel精英培训网

 找回密码
 注册
查看: 11323|回复: 20

INDIRECT练手题

  [复制链接]
发表于 2012-5-31 13:44 | 显示全部楼层 |阅读模式
本帖最后由 飞雨飘 于 2012-6-5 10:03 编辑

公式需用到INDIRECT来返回
公式长度140字数加10经验,以上加8经验。
一个老题,别告我侵权.
另外没注意冒号前(:)项目非定长,即不一定是两个字符.
新加一点要求,一、公式可右拉下拉,公式内字符不变。二、如果不用IFERROR,空格内可出现错误返回。

INDIRECT练手题.rar

3.7 KB, 阅读权限: 1, 下载次数: 255

发表于 2012-5-31 23:09 | 显示全部楼层
本帖最后由 doggie 于 2012-6-1 22:39 编辑

练习一下
一开始想出来的:
  1. =MID(INDIRECT("A"&MATCH(ROW()*10+COLUMN()-20,COUNTIF(OFFSET($A$1,,,ROW($1:$17)-1),"")*10+IF($A$1:$A$17="",COLUMN(),MATCH(LEFT($A$1:$A$17,2),$A$1:$H$1,)),)),4,9)
复制代码

优化了一下的:
  1. =MID(INDIRECT("A"&MATCH(1,IF($A$1:$A$17="",1,LEFT($A$1:$A$17,2)=C$1)*(COUNTIF(OFFSET($A$1,,,ROW($1:$17)-1),"")=(ROW()-2)),)),4,9)
复制代码
对点评修改一下:
=SUBSTITUTE(INDIRECT("A"&MATCH(1,IF($A$1:$A$17="",1,FIND(T(INDIRECT("R1C"&COLUMN(),)),$A$1:$A$17))*(COUNTIF(INDIRECT("A1:A"&ROW($1:$17)-1),"")=(ROW()-2)),)),T(INDIRECT("R1C"&COLUMN(),))&":",)
再优化一下:
=IFERROR(SUBSTITUTE(LOOKUP(2,FIND(T(INDIRECT("R1C"&COLUMN(),)),INDIRECT("A1:A"&SMALL(IF($A$1:$A$18=0,ROW($1:$18)),SUM(ROW()-1)))),$A$1:$A$18),T(INDIRECT("R1C"&COLUMN(),))&":",),"")

如不加公式字符不可变这一点,公式最少可以为129字符。

点评

首先,已注明:号前的字段非定长,也就是不能用LEFT(,2)做,第二,此题灵魂需要INDIRECT来解,而不是仅仅套用一个返回值,即OFFSET引用请改INDIRECT。第三,最好相对引用也用INDIRECT来引用,起到学习此函数的作用。  发表于 2012-6-1 08:19

评分

参与人数 1 +10 收起 理由
飞雨飘 + 10 赞一个!不错的,两个要求点都用到INDIRECT了.

查看全部评分

回复

使用道具 举报

发表于 2012-6-1 11:08 | 显示全部楼层
好长哦
  1. =TEXT(SUBSTITUTE(IF(COUNTIF(OFFSET($A$1,SMALL(ISERR(FIND("汇总",$A$1:$A$99))*99+ROW($1:$99),ROW()-1),,5),C$1&"*"),INDIRECT("R"&SMALL(ISERR(FIND("汇总",$A$1:$A$99))*99+ROW($1:$99),ROW()-1)+1+COUNTIF($B2:B2,">""")&"C1",),""),C$1&":",),IF(COLUMN()=3,"m/d/yyyy",))
复制代码

点评

为什么要去套个TEXT?  发表于 2012-6-1 11:38

评分

参与人数 1 +6 收起 理由
飞雨飘 + 6 没有用到关键的INDIRECT知识点。

查看全部评分

回复

使用道具 举报

发表于 2012-6-1 12:38 | 显示全部楼层
  1. =SUBSTITUTE(INDIRECT("a"&N(MATCH("*"&C$1&"*",INDIRECT("a"&SMALL(IF($A$1:$A999=$A$1,ROW(A$1:A999),4^8),ROW(A1))&":a"&SMALL(IF($A$1:$A999=$A$1,ROW(A$1:A999),4^8),ROW(A2))),))+SMALL(IF($A$1:$A999=$A$1,ROW(A$1:A999),4^8),ROW(A1))-1),C$1&":","")
复制代码

评分

参与人数 1 +6 收起 理由
飞雨飘 + 6 没有用到关键的INDIRECT知识点。

查看全部评分

回复

使用道具 举报

发表于 2012-6-1 12:50 | 显示全部楼层
本帖最后由 rebornxldeng 于 2012-6-1 12:53 编辑

做不出来......{:251:}
什么时候能公布答案啊?最好配个讲解... ...

点评

下周三前。  发表于 2012-6-1 12:55
回复

使用道具 举报

发表于 2012-6-1 16:32 | 显示全部楼层
1.
  1. =SUBSTITUTE(INDIRECT("a"&SMALL(IF($A$1:$A$22="金算盘汇总",ROW($1:$22)),ROWS($1:1))+MATCH(C$1&"*",INDIRECT("a"&SMALL(IF($A$1:$A$22="金算盘汇总",ROW($1:$22)),ROWS($1:1))&":a"&SMALL(IF($A$1:$A$22=0,ROW($1:$22)),ROWS($1:1))),)-1),C$1&":","")
复制代码

点评

也是思路出问题了,想想不用SMALL来定位呢.  发表于 2012-6-1 18:26

评分

参与人数 1 +6 收起 理由
飞雨飘 + 6 没有用到关键的INDIRECT知识点。

查看全部评分

回复

使用道具 举报

发表于 2012-6-2 10:54 | 显示全部楼层
  1. =SUBSTITUTE(INDIRECT("A"&MIN(IF(ISNUMBER(FIND(C$1,$A$1:$A$18))*(COUNTIF(OFFSET($A$1,,,ROW($1:$18)),$A$1)=ROW(A1)),ROW($1:$18),4^8))),C$1&":",)&""
复制代码

点评

如果把OFFSET改为INDIRECT,引用C$1改为INDIRECT引用,就接近练手目的了。  发表于 2012-6-2 11:23

评分

参与人数 1 +8 收起 理由
飞雨飘 + 8 没有用到关键的INDIRECT知识点。

查看全部评分

回复

使用道具 举报

发表于 2012-6-3 10:10 | 显示全部楼层
本帖最后由 魔魔 于 2012-6-3 10:18 编辑

不容错版,长度129:
  1. =MID(VLOOKUP(C$1&"*",INDIRECT(TEXT(SUM(SMALL(($A$1:$A19<>$A$1)*50+ROW($1:19),ROW()-{1,0})*{100,1}),"a0!:a00")),1,),LEN(C$1)+2,99)
复制代码
用iferror容错之后长度是139
  1. =MID(IFERROR(VLOOKUP(C$1&"*",INDIRECT(TEXT(SUM(SMALL(($A$1:$A19<>$A$1)*50+ROW($1:19),ROW()-{1,0})*{100,1}),"a0!:a00")),1,),),LEN(C$1)+2,99)
复制代码

评分

参与人数 1 +10 收起 理由
飞雨飘 + 10 很给力!不过没做到字符不变啊。

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-6-5 09:57 | 显示全部楼层
不容错129字符
=MID(VLOOKUP((ROW()-1)&INDIRECT("r1c",)&"*",COUNTIF(INDIRECT("a1:a"&ROW($1:$99)),$A$1)&$A$1:$A$99,1,),LEN(INDIRECT("r1c",))+3,99)
另一种VLOOKUP131字符
=MID(VLOOKUP(INDIRECT("r1c",)&"*",IF(COUNTIF(INDIRECT("a1:a"&ROW($1:$99)),$A$1)=ROW()-1,$A$1:$A$104),1,),LEN(INDIRECT("r1c",))+2,99)

容错后
=MID(IFERROR(VLOOKUP((ROW()-1)&INDIRECT("r1c",)&"*",COUNTIF(INDIRECT("a1:a"&ROW($1:$99)),$A$1)&$A$1:$A$99,1,),""),LEN(INDIRECT("r1c",))+3,99)
=MID(IFERROR(VLOOKUP(INDIRECT("r1c",)&"*",IF(COUNTIF(INDIRECT("a1:a"&ROW($1:$99)),$A$1)=ROW()-1,$A$1:$A$99),1,),""),LEN(INDIRECT("r1c",))+2,99)
2003容错可通过ISNUMBER解决,因出题主要是练习INDIRECT("r1c",)和COUNTIF(INDIRECT())所以不详述了。
另:外套不用VLOOKUP也可能用其它定位函数如NDEX($A:$A,MATCH()),INDIRECT("a"&MATCH())返回。也不是练题目的同时字数多了十几了字符,也不详述了。
回复

使用道具 举报

 楼主| 发表于 2012-6-5 10:00 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 20:04 , Processed in 0.348886 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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