所以基本上我需要创建一个需要比较包含许多不同字符串的大量单元格的宏。我已经拥有的是这样的:
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
如果我要这样做,那将会非常低效,因为我有很多字符串要比较,有没有更好的方法而不是这样做?我想使用精选案例,但不确定它是如何工作的。
答案 0 :(得分:2)
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
另一种选择是使用2个嵌套循环,从单元格循环和要检查的值。像这样:
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