Excel 匹配字符串中的完整单词

Excel 匹配字符串中的完整单词,excel,vba,for-loop,vb-like-operator,Excel,Vba,For Loop,Vb Like Operator,我有下面的代码,如果条件匹配,用服务填充偏移单元格。但是,在这个阶段,它的工作基础是,如果字符串出现在单元格中,它将应用该值,而不是一个完整的单词。例如,我的标准中有“访问”,而“Vistor”(在一个单元格中)在不应该遵守的情况下将遵守我的代码。有人能帮忙吗 Option Compare Text Sub CHECK_CELL_VALUES() Dim LASTROW As Long Application.ScreenUpdating = False With

我有下面的代码,如果条件匹配,用服务填充偏移单元格。但是,在这个阶段,它的工作基础是,如果字符串出现在单元格中,它将应用该值,而不是一个完整的单词。例如,我的标准中有“访问”,而“Vistor”(在一个单元格中)在不应该遵守的情况下将遵守我的代码。有人能帮忙吗

Option Compare Text
Sub CHECK_CELL_VALUES()
    Dim LASTROW As Long
    Application.ScreenUpdating = False
        With Sheet1
        LASTROW = .Range("A1048576").End(xlUp).Row


            For i = 2 To LASTROW
                If Cells(i, 7).Value Like "*Service*" _
                Or Cells(i, 7).Value Like "*Servicing*" _
                Or Cells(i, 7).Value Like "* Labour*" _
                Or Cells(i, 7).Value Like "* Job*" _
                Or Cells(i, 7).Value Like "* Hire*" _
                Or Cells(i, 7).Value Like "* Visit*" _
                Or Cells(i, 7).Value Like "* Scaffold*" _
                Or Cells(i, 7).Value Like "* Contract*" _
                Or Cells(i, 7).Value Like "* Hour*" _
                Or Cells(i, 7).Value Like "* Month*" _
                Or Cells(i, 7).Value Like "* Quarter*" _
                Or Cells(i, 7).Value Like "* Day*" _
                Or Cells(i, 7).Value Like "* Maintenance*" _
                Or Cells(i, 7).Value Like "* Repair*" _
                Or Cells(i, 7).Value Like "* Survey*" _
                Or Cells(i, 7).Value Like "* Training*" _
                Or Cells(i, 7).Value Like "* Calibration*" _
                Then Cells(i, 7).Offset(0, 46).Value = "Service"
                Debug.Print Cells(i, 7).Address
            Next i

        End With
    Application.ScreenUpdating = True
End Sub
尝试更改此选项:

If Cells(i, 7).Value Like "*Service*"
为此:

If InStr(Cells(i,7).Value,"Service") > 0
依此类推-这将匹配整个字符串
“Service”
有关
InStr
的更多信息,请参见

我这样做的方式是: a) 在要搜索的字符串前后添加空格 b) 搜索前后添加空格的字符串。 下面是一个搜索单词VISIT的示例 而且会匹配的 “访问” “访问” “参观某物” 但将排除 “访客”


为什么不在访问后添加一个空间?所以“*Visit*”我也赞同@Trum的建议,如果你想符合这种情况,请将你的标准词放在“Visit”之类的空格中。嗨,谢谢,很抱歉stupidity@Trum如果单词位于一行的开头或结尾,仅使用空格来定义单词会引起问题;或者如果单词以撇号或引号结尾。对于原始海报而言,这可能不是一个问题。但是,一般来说,为了定义一个单词,可以测试任何非单词字符,或者字符串的开头或结尾。这可以用“纯VBA”实现,也可以用带有单词边界标记的正则表达式轻松实现。您的代码仍然可以在较大的单词中找到片段。e、 g.
Instr(“访问者”、“访问”)
将返回一个大于0的值。
InStr(1, " " & UCase(Sheets("Sheet1").Cells(i, 1)) & " ", " VISIT ")