匹配字符串中的完整单词
Posted
技术标签:
【中文标题】匹配字符串中的完整单词【英文标题】:Match Complete word in string 【发布时间】:2015-09-28 09:50:06 【问题描述】:我有下面的代码,如果条件匹配,它会用服务填充偏移单元格。然而在这个阶段,它的操作基础是如果字符串出现在单元格中,它将应用值而不是单词是一个完整的单词。例如,我的标准中有“访问”,而“访问者”(在单元格内)将在我的代码中不应该遵守时。请问有人可以帮忙吗?
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
【问题讨论】:
访问后为什么不加空格?所以“*访问*” 我也赞同@Trum 的建议,如果你想匹配这种情况,请将你的条件词用“访问”之类的空格包围 嗨,谢谢你的愚蠢 @Trum 如果单词位于行首或行尾,单独使用空格来定义单词会导致问题;或者如果单词以撇号或引号“结尾”。对于原始海报来说,这可能不是问题。但是,一般来说,为了定义一个单词,可以测试任何非单词字符,或者字符串的开头或结尾。这可以使用“直接 VBA”来完成,也可以使用具有单词边界标记的正则表达式轻松完成。 【参考方案1】:我这样做的方法是: a) 在要搜索的字符串前后添加一个空格 b) 搜索前后添加空格的字符串。 这是一个搜索单词 VISIT 的示例 它会匹配 “访问” “一次访问” “访问某事” 但会排除 “访客”
InStr(1, " " & UCase(Sheets("Sheet1").Cells(i, 1)) & " ", " VISIT ")
【讨论】:
【参考方案2】:尝试改变这个:
If Cells(i, 7).Value Like "*Service*"
到这里:
If InStr(Cells(i,7).Value,"Service") > 0
依此类推 - 这将匹配整个字符串 "Service"
更多关于 InStr
的信息可以找到 here
【讨论】:
您的代码仍会在更大的单词中找到片段。例如Instr("Visitor","Visit")
将返回一个 > 0 的值。以上是关于匹配字符串中的完整单词的主要内容,如果未能解决你的问题,请参考以下文章