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

Excel-VBA:减少匹配方法的限制(通过在句子中查找单词),vba,excel,Vba,Excel,我在excel程序中使用匹配函数,但有一个问题,因为它只选择相同的匹配项。例如,如果您将一个带有“香蕉”的单元格与另一个带有“香蕉”的单元格进行比较,它将工作并返回正值。 但是如果你把“香蕉”和一个内容为“香蕉巧克力”的单元格进行比较,那么它就不会识别出“香蕉”这个词在单元格中 在我的例子中,每当在句子中发现一个单词时,我都希望返回一个真值 这是我的密码: Worksheets("sBldgMakati").Activate For i = 2 To 605 Range("B" &

我在excel程序中使用匹配函数,但有一个问题,因为它只选择相同的匹配项。例如,如果您将一个带有“香蕉”的单元格与另一个带有“香蕉”的单元格进行比较,它将工作并返回正值。
但是如果你把“香蕉”和一个内容为“香蕉巧克力”的单元格进行比较,那么它就不会识别出“香蕉”这个词在单元格中

在我的例子中,每当在句子中发现一个单词时,我都希望返回一个真值

这是我的密码:

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  
我必须指定,在此代码中,
elementsListange
对应于一系列单元格,其内容仅为一个单词(“例如香蕉”),而
ActiveCell.value
通常是一个较长的表达式(“例如香蕉巧克力”)


提前感谢您的帮助

从Excel中的帮助文档中(如果按F1键并搜索
匹配项
):

如果match_type为0且lookup_值为文本字符串,则可以使用 通配符-中的问号(?)和星号(*) 查找值参数。问号匹配任何单个字符; 星号匹配任何字符序列

因此,
=MATCH(“*Banana*”,C8,0)
返回
1
如果
C8
包含
“香蕉巧克力”

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

myResult = IsNumeric(Application.Match("*" & ActiveCell.Value & "*", elementsListRange, 0))
如果在
B2:B605
范围内有许多句子必须根据
elementListRange
中的所有单词进行测试,就像在这种情况下出现的那样,我认为您可能需要这样做(未测试):


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

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
要将其与范围一起使用,请执行以下操作:

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

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

感谢@Simon提供的此信息,这很有帮助。然而,在我的情况下,我并没有成功地使它工作,因为我不是直接处理我的单元格内容,而是处理范围。我试图在代码中添加星号,但显然这不是正确的方法。你知道在“ElementsListange”(在我的案例中,“banana”将存储在哪里)周围放置星号的正确方法是什么吗?我编辑了我的答案,以展示如何将星号连接到单元格值的两端。哦,谢谢,真的很有趣。但是,很抱歉再次征求您的意见,因为带有单个单词的单元格存储在“elementslitrange”中,所以对ActiveCelle.Value执行此操作不起作用。而addind“*”&在“elementsListRange”之前和之后返回错误消息(类型不兼容)。我还直接尝试了ElementsListeng的内容,但它不起作用:Set elementsListeng=.Range(“D2:D”&lRowD)@Phalanx:我对
Match()
的理解是它将在
ElementsListeng
中搜索
ActiveCell.Value
。因此,如果您试图在
ActiveCell.Value
中查找
elementsListRange
中的任何单词,那么我认为您必须逐个单元格循环
elementsListRange
并在活动单元格中保留的字符串中搜索它们。我已经修改了我的答案,试图解决这个问题。对不起,西蒙,我没有选择正确的答案,因为我仍然有“语法”错误。马特的回答对我的情况很有效,给了我预期的结果。但无论如何,非常感谢,我学到了很多!您是否尝试过使用
查找
搜索
功能?
element是否奇怪
VBA列表/单元格值集合的单元格范围?也许你可以选择所有问题的答案,这就是我们这样做的原因!
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