VBA⾥的⽂本函数
find()search()substitute()replace()m。。。
1 find()
1.1 worksheetfunction.find()
⼯作表函数
FIND(find_text, within_text, [start_num])
FINDB(find_text, within_text, [start_num]) 中⽂字符等会识别为2位
返回的是 要查的内容在字符串内的位数。
局限性
区分⼤⼩写,不允许通配符
如果在VBA中使⽤,记得字符串,是需要"" 表达的
也是模糊查询
Sub test501()
Debug.Print WorksheetFunction.Find(a, Range("B3").Value)
Debug.Print WorksheetFunction.Find(Range("d5").Value, Range("B3").Value)
Debug.Print WorksheetFunction.Find("a", Range("B3").Value)
Debug.Print WorksheetFunction.Find(3, Range("B3").Value)
End Sub
1.2 worksheetfunction.find() 使⽤注意点
如果在EXCEL内使⽤
如果查的内容不到,find() 不会报错,⽽是返回第1个字符串的位置,⼀般会返回1,其实已经是算报错了!
另外,引⽤单元格的值,就相当于使⽤了变量,不需要特别加 字符串也不需要特别加 ""
但如果是在公式⾥写字符串,也需要加""
如果在VBA中使⽤
⾸先尽量不要再VBA中⽤⼯作表函数,因为⼀旦健壮性差,⼀旦查不到会报错,如下图
字符串要加"",除⾮是引⽤单元格range的值。
1.3 application.find() 返回的是range
在VBA中⽤⼯作表函数,尽量⽤ application.find() ⽽尽量不⽤ worksheetfunction.find(),这两者语法和功能类似。
application.find() 虽然有些情况只会返回 错误,但有些情况再VBA⾥也会 弹出报错
application.worksheetfunction.find() 更适合⼯作表
application.find() 更适合VBA
虽然VBA可能⾃带⼀些函数,⽐如VBA.find() 就没有,但即使有,和application的功能⼀般都是不同的。
Sub test503()
Debug.Print Application.Find(a, Range("B3").Value)
Debug.Print Application.Find(Range("d5").Value, Range("B3").Value)
Debug.Print Application.Find("a", Range("B3").Value)
Debug.Print Application.Find(3, Range("B3").Value)
Debug.Print Application.Find("aaaa", Range("B3").Value) '不到会返回错误值,但不会跳出错误提⽰
End Sub
1.4 application.find() 的问题----主要适合在⼀个字符串内查!⽽且类型不匹配的话也会跳出报错。
⾸先,先弄清楚
application.find 和 application.worksheetfunction.find 都源于 ⼯作表
⽽在⼯作表中,多少情况下,都是查⼀个单元格的内容----⼀般都是字符串
⽽ application.find() 就是查⼀个单元格⾥的元素 ,只能查⼀个字符串的内容
实测只适合字符串,不适合多个单元格的range,数组等
如果,查的范围是数组,或多个单元格的range,会报错,类型不匹配
application.find() 虽然可以有些情况下,可以返回 error 2015
但是⼀旦查的内容,不到,也可能会弹出报错,VBE编辑器好像不稳定,多次运⾏的结果不同
Sub test505()
Debug.Print Application.Find(2, "a12345")
Debug.Print Application.Find(3, Range("b10"))
Debug.Print Application.Find("aaaa", Range("b10").Value) '实测VBE不稳定,有时候也会弹出报错
'查不到的内容也会报类型不匹配
'Debug.Print "Application.Find(9, ""a12345"") " & Application.Find(9, "a12345")
'Debug.Print "Application.Find(""aaa"", ""a12345"") " & Application.Find("aaa", "a12345")
'下⾯会报错类型不匹配
'Debug.Print "Application.Find(1, Array(1, 2, 3)) " & Application.Find(1, Array(1, 2, 3))
'Debug.Print "Application.Find(2, Range(""B1: B2 "")) " & Application.Find(2, Range("B1:B2"))
End Sub
1.5 VBA.find() 和 find() ,这两个函数并没有,不存在
1.6 object.find()
语法
text函数什么意思Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat) find()⼀般是为了查询结果,返回的是到的对象 range
局限性
是模糊查询
只会返回查到的第⼀个range()--单元格
Sub test502()
Dim a As Object 'find返回的应该是 range对象
Set a = ActiveWorkbook.ActiveSheet.UsedRange.Find(what:=2, LookIn:=xlValues)
Debug.Print a.Address
'这句话语法上OK,但因为find() 本⾝的⽬的,不返回find()的值,这么写显得很奇怪
ActiveSheet.UsedRange.Find what:=2, LookIn:=xlValues
'ActiveSheet.UsedRange.Find(what:=2, LookIn:=xlValues) '这样会报错
End Sub
详细了find()函数的说明,以后再学习
1.7 Application.find() 和 obejct.find() 的区别,语法和返回值都不同。
这两者的语法差别很⼤
application.find() 是⼯作表相关的,返回的是到的字符串的位置
obejct.find() 是VBA相关的,返回的是range
2 search() ----不区分⼤⼩写,可以加通配符,其他类似find() 2.1 worksheetfunction.search()
语法
search(find_text, within_text, [start_num])
=SEARCH("n","printer")
=SEARCH("base","database") 会返回字符串⾸字母的位置
search()
searchB()
局限性
search() 是不区分⼤⼩写的
也是模糊查询
2.2 application.search()
Sub test503()
Debug.Print Application.Search(a, Range("B3").Value)
Debug.Print Application.Search(Range("d5").Value, Range("B3").Value)
Debug.Print Application.Search("a", Range("B3").Value)
Debug.Print Application.Search(3, Range("B3").Value)
Debug.Print Application.Search("aaaa", Range("B3").Value) '不到会返回错误值,但不会跳出错误提⽰End Sub
2.3 object.search() 没有
2.4 search() 没有
2.5 VBA中取代search() 和 find() 的是 vba.instr()
2.6 VBA.instr() 语法,但是并没有object.instr()
InStr([start,]string1,string2[,compare])
Start - ⼀个可选参数。指定搜索的起始位置。搜索从第⼀个位置开始,从左到右。
String1 - 必需的参数。要搜索的字符串。
String2 - 必需的参数。要在String1中搜索的字符串。
Compare - ⼀个可选参数。指定要使⽤的字符串⽐较。它可以采取以下提到的值:
0 = vbBinaryCompare - 执⾏⼆进制⽐较(默认)
1 = vbTextCompare - 执⾏⽂本⽐较/
Sub test504()
Debug.Print InStr(1, Range("B3").Value, Range("d5").Value)
Dim a
a = InStr(1, Range("B3").Value, Range("d5").Value)
Debug.Print a
End Sub
3 substitute
3.1 worksheetfunction.substitute() 基本语法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论