VBA常用的文本函数 instr、mid、find
InStr 函数
Tips:在Visual Basic中,字符串的默认比较方法是vbBinaryCompare(二进制比较),它是区分大小写的。如果你想进行不区分大小写的比较,可以使用vbTextCompare(文本比较)。
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(4, SearchString, SearchChar, 1)
' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(1, SearchString, SearchChar, 0)
' Comparison is binary by default (last argument is omitted).
MyPos = Instr(SearchString, SearchChar) ' Returns 9.
MyPos = Instr(1, SearchString, "W") ' Returns 0.
Mid 函数
Dim MyString, FirstWord, LastWord, MidWords
MyString = "Mid Function Demo" ' Create text string.
FirstWord = Mid(MyString, 1, 3) ' Returns "Mid".
LastWord = Mid(MyString, 14, 4) ' Returns "Demo".
MidWords = Mid(MyString, 5) ' Returns "Function Demo".
Find函数
返回值:
一个 Range 对象,它代表在其中找到该信息的第一个单元格。如果找到符合条件的单元格,接收该返回值的变量将被设置为该单元格的引用,即找到的单元格对象。如果未找到符合条件的单元格,接收该返回值的变量将为 Nothing
。
语法:
Find参数详解:
-
What
: 要查找的内容,可以是字符串或包含字符串的范围对象。After
: 一个表示搜索起始位置的范围对象或单元格引用。搜索将从此范围之后开始。如果不指定此参数,搜索将从范围的起始位置开始。LookIn
: 要在其内搜索的内容的类型。可以是常量 xlValues、xlFormulas 或 xlComments,分别表示搜索值、公式或批注。默认为 xlValues。LookAt
: 指定匹配的方式。可以是常量 xlWhole(完全匹配)或 xlPart(部分匹配)。默认为 xlPart。SearchOrder
: 指定搜索顺序,这个无关紧要的。可以是常量 xlByRows(按行)或 xlByColumns(按列)。默认为 xlByRows。SearchDirection
: 指定搜索方向。可以是常量 xlNext(向后搜索)或 xlPrevious(向前搜索)。默认为 xlNext。MatchCase
: 布尔值,指定是否区分大小写。默认为 False(不区分大小写)。MatchByte
: 布尔值,指定是否区分全角和半角字符,这个默认就好让系统自己决定。默认为 False(不区分全角和半角字符)。SearchFormat
: 一个布尔值,指定是否应该考虑单元格格式。默认为 False。
FindNext函数
FindNext
是 VBA 中的一个函数,用于在使用 Find
函数进行查找后,继续查找下一个匹配项。
在 VBA 中,如果使用 Find 函数查找某个内容,并且多个单元格符合条件,Find 函数只返回首个匹配项的单元格。它不会直接返回所有匹配项的集合。
如果需要获取所有匹配项所在的单元格集合,可以使用 Do While 循环和 FindNext 函数来继续查找并将匹配项添加到结果集合中。
示例:如何使用 Find 函数和 FindNext 函数来获取所有匹配项的单元格集合:
Dim rng As Range
Set rng = Range("A1:A10")
Dim searchValue As Variant
searchValue = "apple"
Dim searchCell As Range
Set searchCell = rng.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
If Not searchCell Is Nothing Then
Dim resultRange As Range
Set resultRange = searchCell
' 继续查找其他匹配项,并将其添加到结果范围中
Do
Set searchCell = rng.FindNext(After:=searchCell)
If Not searchCell Is Nothing Then
Set resultRange = Union(resultRange, searchCell)
Else
Exit Do
End If
Loop While searchCell.Address <> resultRange.Cells(1).Address
' 在结果范围中进行进一步操作
' ...
Else
MsgBox "未找到符合条件的单元格"
End If
在上述示例中,首次使用 Find 函数查找 searchValue
(即 "apple")出现的单元格。然后,在 Do While 循环中,使用 FindNext 函数继续查找下一个匹配项,并将其添加到结果范围 resultRange
中。循环会继续,直到搜索回到首个匹配项为止。
以下是关于 FindNext
函数的一些要点:
FindNext
函数在循环中使用,以继续查找下一个匹配项。- 它会在
Find
后的范围内执行查找,并返回下一个匹配项的单元格引用。 - 如果没有更多的匹配项,
FindNext
返回Nothing
。 FindNext
函数必须在使用Find
函数后调用,否则会引发运行时错误。- 在使用
FindNext
之前,通常应该先执行一次Find
,以确保找到首个匹配项。
作者QQ4577105