如果 exact 匹配意味着单元格值必须 exactly 匹配给定的字符串,那么您将不会使用 Instr() 并仅比较单元格内容:
Sub ConvertComputerNames()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("A2:A200")
For Each cel In SrchRng
If cel.Value = "W7ADH" Then
cel.Offset(0, 7).Value2 = "LTW7ADH"
End If
If cel.Value = "ADH" Then
cel.Offset(0, 7).Value2 = "LTW10ADH"
End If
Next
End Sub
在这种情况下,最合适的构造是If ... ElseIf ... End If:
For Each cel In SrchRng
If cel.Value = "W7ADH" Then
cel.Offset(0, 7).Value = "LTW7ADH"
ElseIf cel.Value = "ADH" Then
cel.Offset(0, 7).Value = "LTW10ADH"
End If
Next
或Select Case ... End Select 一个:
For Each cel In SrchRng
Select Case cel.Value
Case "W7ADH"
cel.Offset(0, 7).Value = "LTW7ADH"
Case "ADH"
cel.Offset(0, 7).Value = "LTW10ADH"
End Select
Next
如果您确实需要 部分 匹配,那么 @KenWhite 指出了问题,另一种正确处理它的方法是再次通过 Select Case 构造:
Sub ConvertComputerNames()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("A2:A200")
For Each cel In SrchRng
Select Case True
Case InStr(1, cel.Value, "W7ADH")
cel.Offset(0, 7).Value = "LTW7ADH"
Case InStr(1, cel.Value, "ADH")
cel.Offset(0, 7).Value = "LTW10ADH"
End Select
Next
End Sub
在第一个匹配Case 条件时,执行相应的代码,然后代码退出Select Case - End Select 块,因此需要按正确的顺序放置检查