作者JieJuen (David)
看板Office
标题Re: [算表] Excel较少被提及的函数与小技巧
时间Fri Nov 30 00:07:30 2007
看不惯公式的朋友可能会觉得公式怎麽那麽长....不知道在做什麽...
尤其是有好多条的时候
※ 引述《JieJuen (David)》之铭言:
: 一栏解决的方法用offset或index
: C1
: =IF(ROW()>COUNTIF($A$1:$A$4,"b"),"",
: OFFSET($B$1,SMALL(IF($A$1:$A$4="b",ROW($A$1:$A$4)),ROW())-1,))
: 或
: =IF(ROW()>COUNTIF($A$1:$A$4,"b"),"",
: INDEX($B$1:$B$4,SMALL(IF($A$1:$A$4="b",ROW($A$1:$A$4)),ROW())))
: 看起来是变长了,但三个式子合为一个式子,其实写起来是比较简单,也比较短
: 当然计算可能慢了点
: 但灵活度也大了,要分大小写就可以改成
: =IF(ROW()>COUNT(1/EXACT("b",$A$1:$A$4)),"",
: INDEX($B$1:$B$4,SMALL(IF(EXACT("b",$A$1:$A$4),ROW($A$1:$A$4)),ROW())))
: 要找"含有小写b"
: =IF(ROW()>COUNT(FIND("b",$A$1:$A$4)),"",INDEX($B$1:$B$4,
: SMALL(IF(ISNUMBER(FIND("b",$A$1:$A$4)),ROW($A$1:$A$4)),ROW())))
: 不分大小写,FIND改成SEARCH
例如下边写"作业完成"
但其实不知道上面哪一条式子才是答案....(头都昏了)
: 作业完成...
=IF(ROW()>COUNT(1/EXACT("b",$A$1:$A$4)),"",
INDEX($B$1:$B$4,SMALL(IF(EXACT("b",$A$1:$A$4),ROW($A$1:$A$4)),ROW())))
作业是这一条
当然公式不适合在BBS上看的
放到EXCEL里比较好,不过有时候放到EXCEL也不明了,这时就需要解释一下了
如果演算法一样的话
公式应该不会比VBA长,至少公式不用定义
但是全都挤在一起,不怎麽好看
那...就分开看吧
=IF(
ROW() > COUNT(
1/EXACT(
"b",$A$1:$A$4
)
),
"",
INDEX(
$B$1:$B$4,
SMALL(
IF(
EXACT(
"b",$A$1:$A$4
),
ROW(
$A$1:$A$4
)
),
ROW()
)
)
)
这样有好一点吗XD
如果您喜欢的话
可以这样写
贴到EXCEL里可以动喔!
还差一个注解是吧,没问题~
=IF(
ROW() > COUNT(
1/EXACT(
"b",$A$1:$A$4
)
+N("如果是TRUE,1/TRUE=1,
如果是FALSE,1/FALSE=#DIV/0!,
因为COUNT忽略错误值,只算数字的个数,
所以可以知道有几个符合条件")
)
+N("列号大於""b""的个数,就反回空白"),
"",
INDEX(
$B$1:$B$4,
SMALL(
IF(
EXACT(
"b",$A$1:$A$4
),
ROW(
$A$1:$A$4
)
+N("符合完全等於b的,传回列号,其他传回FALSE")
),
ROW()
+N("在第几列,就传回第几小的")
)
)
)
上面可以执行的一模一样~~
N()是会将上面写的文字转为0,
所以可以写在加上零不会变动的地方。
当然平常写应该不用这麽极端,
但是换行与加注解这两个小技巧还是蛮好用的,
如果公式真的很长的话
(上面那个在我的EXCEL中只有一行)
换行的方法是按Alt+Enter,也许有些人知道这样按,
但没想过在写公式时也可以按XD
最後提醒,如果有人真的要试,
这是阵列公式,输入完要按Ctrl+Shift+Enter.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.59.188
1F:推 mddc62:阵列公式跟ACCESS 後者好像简单一点 11/30 00:37
3F:推 JieJuen:要在文字处加注解,则再用T()把0转为空白~ 12/05 02:55