您的位置:首页 > 其它

excel中以指定分隔符从右往左截取字符&多重判断

2015-06-01 18:38 435 查看
从A串中提取从"."开始的字符串B,可以使用find函数来对"."的首次出现进行定位,这类似于各种语言中的indexOf功能。find是从左往右查找的,在EXCEL中并没有从右往左查找,类似lastIndexOf的函数。

在EXCEL想要从右往左截取字符,可使用公式:TRIM(RIGHT(SUBSTITUTE(A1,".",REPT(" ",LEN(A1))),LEN(A1)))。

例:已知A1=http://www.163.com/sports/Arsenal.html,要获取Arsenal.html字符串。

公式=TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",LEN(A1))),LEN(A1)))。

解释:

1. REPT(" ",LEN(A1))的意思是得到一空格串,长度为A1的长度。

REPT函数可可以按照定义的次数重复现实文本,相当于复制文本。

2. SUBSTITUTE(A1,"/",REPT(" ",LEN(A1)))

将A1中的字符"/"用多个空格串(第1步所得)来替换。此时,可获得的文本如下:

http:
www.163.com sports
Arsenal.html
SUBSTITUTE(text,old_text,new_text,instance_num) 函数是在文本字符串中用 new_text 替代 old_text。

3. 在以指定空格串代替所有分隔符后,就可以使用Right函数,从右往左取子串了。即

=RIGHT(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),LEN(A2))

此时得到的字串如:

Arsenal.html

4. 最后使用Trim函数将空格删除,可得到结果:Arsenal.html

=TRIM(RIGHT(SUBSTITUTE(A2,"/",REPT(" ",LEN(A2))),LEN(A2)))

来源:http://blog.sina.com.cn/s/blog_67532f7c01019gvk.html

面对多重判断,excel有四法

一般来说,我们经常会碰到这样的问题,即





需要按照这张mapping表进行数值判断,下面有四种方法:

1 经典法:if多重判断

这个就不用多说了,一般来说,我们这个函数一般写为:





当然这里面and与函数有点多余,所以我们也可以写为







当时这个也有缺点,因为经常很多人会把临界点搞错,比如A1=5000的情况是D,还是C,所以会经常弄混的。最重要的,多重只能到7重,而且重数多了,if会写的非常乱

2 vlookup函数妙用法

啊,vlookup函数呀,这好像和多重判断不搭界呀,其实,vlookup函数有精确匹配和近似匹配,我们一般用的是精确匹配,而这里用的是近似匹配(原理在于近似匹配采用的是返回小于 lookup_value 的最大数值,所以一定要升序排列哦)。





而这里函数写为

=VLOOKUP(E2,B2:D5,3,TRUE)

就能返回各个相应的值,这个比if函数简单,而且可以支持7重以上。

但是缺点是一旦不是>=,而是>的下限形式,会比较麻烦。

3 VBA进阶1:select case函数

大家去查查外面的VBA书籍,这个说的比较多,举个例子吧

我要对所有的上市公司进行判断,要按照利润区间分为





这个大家就不要用if写了,9重的if第一不支持(号称excel 2007 if函数只支持7重),第二即使写出来,过了一段时间,自己写的自己也不认识了。所以这边用VBA写了一个例子

Function profitrank(income) As String

Select Case income

Case Is <= 0

profitrank = "<=0"

Case Is <= 5000

profitrank = "0-5千万"

Case Is <= 10000

profitrank = "5千万-1亿"

Case Is <= 20000

profitrank = "1亿-2亿"

Case Is <= 30000

profitrank = "2亿-3亿"

Case Is <= 40000

profitrank = "3亿-4亿"

Case Is <= 50000

profitrank = "4亿-5亿"

Case Is <= 100000

profitrank = "5亿-10亿"

Case Else

profitrank = ">10亿"

End Select

End Function

这个函数,我定义为profitrank函数,这个大家可以copy到自己的excel中使用

4 VBA进阶2:switch函数

用过access的人都知道,它里面的switch比较好用,语法就是

Switch(条件1,”结论1”,条件2,”结论2”,条件3,”结论3”,…..)

比if函数好多了,可惜的是excel工作表竟然不知道switch函数,但是老天有眼,excel的VBA函数却可以支持switch,所以有些高手就做了些为国为名的好事(这里得感谢外国高手们,这帮人呀,牛)

其函数可以直接写作

=Switch2(A1<1000,"D",A1<5000,"C",A1<10000,"B",TRUE,"A")

比较if函数,是不是即简洁又清晰





目前代码如下:

Function Switch2(Test1 As String, Result1 As String, _

Optional Test2 As String, Optional Result2 As String, _

Optional Test3 As String, Optional Result3 As String, _

Optional Test4 As String, Optional Result4 As String, _

Optional Test5 As String, Optional Result5 As String, _

Optional Test6 As String, Optional Result6 As String, _

Optional Test7 As String, Optional Result7 As String, _

Optional Test8 As String, Optional Result8 As String, _

Optional Test9 As String, Optional Result9 As String, _

Optional Test10 As String, Optional Result10 As String, _

Optional Test11 As String, Optional Result11 As String, _

Optional Test12 As String, Optional Result12 As String, _

Optional Test13 As String, Optional Result13 As String, _

Optional Test14 As String, Optional Result14 As String)
Switch2 = Switch(Test1, Result1, _

Test2, Result2, _

Test3, Result3, _

Test4, Result4, _

Test5, Result5, _

Test6, Result6, _

Test7, Result7, _

Test8, Result8, _

Test9, Result9, _

Test10, Result10, _

Test11, Result11, _

Test12, Result12, _

Test13, Result13, _

Test14, Result14)

End Function
这个大家也可以copy到excel中,非常方便,目前代码里面是支持14个条件的,大家可以任意扩充)

5 结论:if如果做多重判断,是不方便了,如果考虑到简单实用,建议用vlookup,如果还想多做VBA的学习,那还是用后面的两个VBA方法。

来源:http://blog.sina.com.cn/s/blog_603d40f70100esta.html

其他:1、excel自定义函数添加,在Excel工作表界面下按<ALT+F11>组合键打开VBA编辑器,单击“插入”→“模块”,并在右边的代码窗口输入自定义函数的程序代码。单击窗口右上角的“关闭”按钮关闭VBA编辑器,返回excel工作表界面就可使用。

来源:http://www.ittribalwo.com/article/1274.html

2、在使用公式或函数后,为何双击单元格右下角“十”字,没有作用?

如果因为特殊原因 不可以双击填充 则选择要填充的区域 按下ctrl+D 进行填充。

来源:http://www.excelpx.com/thread-329199-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: