Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在vba中搜索多个字符串_Excel_Vba - Fatal编程技术网

Excel 在vba中搜索多个字符串

Excel 在vba中搜索多个字符串,excel,vba,Excel,Vba,所以基本上我需要创建一个宏来比较包含许多不同字符串的许多单元格。我已经拥有的是这样的: Sub strcom() Dim r as range ‘dt_range is a named range in name manager For r in range(“dt_range”) If instr(“ab”, r.value,1) then ... If instr(“cd”, r.value, 1) then ... ... Next r ... End sub Sub StrCom()

所以基本上我需要创建一个宏来比较包含许多不同字符串的许多单元格。我已经拥有的是这样的:

Sub strcom()
Dim r as range ‘dt_range is a named range in name manager
For r in range(“dt_range”)
If instr(“ab”, r.value,1) then ...
If instr(“cd”, r.value, 1) then ...
...
Next r
...
End sub
Sub StrCom()

    Dim r As Range
    Dim dtRange As Range

    Set dtRange = Range("A1:Z10")
    Dim someArray As Variant

    someArray = Array("ab", "cd", "ef")
    Dim arrVal As Variant

    For Each r In dtRange
        For Each arrVal In someArray
            If InStr(1, arrVal, r) Then
                'do something
            End If
        Next arrVal
    Next r

End Sub

如果我要这么做的话,效率会很低,因为我有很多字符串要比较,有没有更好的方法来代替这个?我想使用select case,但不确定它将如何工作。

select case
If Else
相比,它的优势非常小。但是,这是一种方法:

Sub StrCom()

    Dim r As Range
    Dim dtRange As Range

    Set dtRange = Range("A1:Z10")

    For Each r In dtRange

        Select Case True

        Case InStr(1, "ab", r)

        Case InStr(1, "cd", r)

        Case Else

        End Select

    Next r
End Sub
另一个选项是使用两个嵌套循环,从单元格和要检查的值循环。大概是这样的:

Sub strcom()
Dim r as range ‘dt_range is a named range in name manager
For r in range(“dt_range”)
If instr(“ab”, r.value,1) then ...
If instr(“cd”, r.value, 1) then ...
...
Next r
...
End sub
Sub StrCom()

    Dim r As Range
    Dim dtRange As Range

    Set dtRange = Range("A1:Z10")
    Dim someArray As Variant

    someArray = Array("ab", "cd", "ef")
    Dim arrVal As Variant

    For Each r In dtRange
        For Each arrVal In someArray
            If InStr(1, arrVal, r) Then
                'do something
            End If
        Next arrVal
    Next r

End Sub

那么,每个人的行动是否有所不同。。。。。。。。。??