【发布时间】:2017-10-09 23:36:16
【问题描述】:
如何使用 Excel 宏来确定子字符串的所有单词是否以任何顺序包含在主字符串中的真/假?例如,我想检查这个子字符串“ford F150”中的单词是否包含在主字符串“like new f150 ford black”中,它应该返回true。
我尝试了上面的代码示例,但它们不起作用。
我猜测这样做的方法是将子字符串拆分为一个数组,然后检查数组的每个元素是否在主字符串中。如果子字符串的所有元素都在主字符串中,则为真。
我正在使用 VBA 7.1。现在我的宏运行,但无论我搜索什么文本,它总是返回 TRUE。也许这是 InStr 比较方法的问题?也许在数组中存储字符串元素是个问题?这是我的宏:
Sub Macro 1()
Dim MainString As String
Dim SubString As String
Dim SubStringArray() As String
Dim bFound As Boolean
MainString = Cells(1, 1).Text
SubString = Cells(2, 1).Text
SubStringArray() = Split(SubString, " ")
bFound = False
For Each element In SubStringArray
If InStr(MainString, element) <> 0 Then
bFound = True
Exit For
End If
Next
Cells(1, 7) = bFound
End Sub
我还想确保我不会在“fording”中找到部分匹配项,例如“ford”。我只想检查完整的单词。
【问题讨论】:
-
这就是您使用
Option Explicit的原因 - 这样未声明的变量(如elemement)就不会让您绊倒并浪费您的时间... -
您有一个检查,InStr(MainString, element) >= 0。如果 instr 返回 0,则表示未找到字符串。所以bfound永远都是真的。是这个问题吗?将条件更改为 InStr(MainString, element) >0 并尝试。
-
@Tim 我发现了这个拼写错误并修复了它。感谢您提供有关“选项显式”的提示。
-
@Valli 我尝试将其更改为“> 0”,但仍然得到相同的结果。请注意,如果在 Mainstring 中找不到 Substring,我相信 InStr 会返回错误...这就是为什么我认为 ">= 0" 甚至 " 0" 都可以正常工作。
-
如果你想考虑单词边界,那么你需要做更多的工作,甚至可能使用正则表达式......