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,以确保找到首个匹配项。
posted @ 2023-07-12 15:35  iZJ"Qq4577105  阅读(464)  评论(0编辑  收藏  举报