从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工作表界面下按
来源:http://www.ittribalwo.com/article/1274.html
2、在使用公式或函数后,为何双击单元格右下角“十”字,没有作用?
如果因为特殊原因 不可以双击填充 则选择要填充的区域 按下ctrl+D 进行填充。
来源:http://www.excelpx.com/thread-329199-1-1.html