Excel - VBA:使匹配方法限制较少(通过在句子中查找单词)

Pha*_*anx 5 excel vba excel-vba

我在我的excel程序中使用匹配函数,但我有一个问题,因为它只选择相同的匹配.例如,如果将具有"Banana"的单元格与具有"Banana"的另一个单元格进行比较,则它将起作用并返回正值.
但是如果你将"Banana"与一个内容为"Banana choco"的细胞进行比较,那么它就不会认识到香蕉这个词在细胞中.

在我的情况下,我想在句子中发现一个单词时返回一个TRUE值.

这是我的代码:

Worksheets("sBldgMakati").Activate

For i = 2 To 605
  Range("B" & i).Activate
  myResult = IsNumeric(Application.Match(ActiveCell.Value, elementsListRange, 0))

   If myResult Then
   Range("K" & i).Value = Range("K" & i).Value + 10
   Else
   Range("K" & i).Value = Range("K" & i).Value + 0
End If

Next i  
Run Code Online (Sandbox Code Playgroud)

我必须在此代码中指定elementsListRange对应于一系列单元格,其内容只有一个单词(例如"Banana"),并且ActiveCell.value通常是一个较长的表达式(例如"Banana choco").

在此先感谢您的帮助 !

Sim*_*mon 5

从Excel中的帮助文档(如果按F1并搜索match):

如果match_type为0且lookup_value为文本字符串,则可以在lookup_value参数中使用通配符 - 问号(?)和星号(*).问号与任何单个字符匹配; 星号匹配任何字符序列.

因此,如果包含则=MATCH("*Banana*",C8,0)返回.1C8"Banana choco"

在VBA中,如果要匹配的项目位于单元格中,则可以包含带字符串连接的通配符星号,例如:

myResult = IsNumeric(Application.Match("*" & ActiveCell.Value & "*", elementsListRange, 0))
Run Code Online (Sandbox Code Playgroud)

如果范围内有许多句子B2:B605必须针对所有单词进行测试elementListRange,就像在这种情况下的情况一样,我认为你可能需要做这样的事情(未经测试):

For Each cell in elementsListRange.Cells
    myResult = Application.Match("*" & cell.Value & "*", B2:B605, 0)
    if (IsNumeric(myResult)) then
        Range("K" & myResult).Value = Range("K" & myResult).Value + 10
    end if
next
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 2

使用以下函数,它匹配字符串中的子字符串:

Function match(searchStr As Variant, matchStr As Variant) As Boolean
    match = False
    If (IsNull(searchStr) Or IsNull(matchStr)) Then Exit Function
    If (matchStr = "") Or (searchStr = "") Then Exit Function
    Dim f As Variant
    f = InStr(1, CStr(searchStr), CStr(matchStr), vbTextCompare)
    If IsNull(f) Then Exit Function
    match = f > 0
End Function
Run Code Online (Sandbox Code Playgroud)

要将其与范围一起使用:

Dim searchstr="A Banana found"
Dim isFound as boolean
IsFound=false
For each c in range
    If match(searchstr, c.value) 
         IsFound=true
         Exit for
    End if
End for
Run Code Online (Sandbox Code Playgroud)

请注意,searchStr和matchStr是变体,因此您可以将 Excel 单元格中的值传递给它。