5

我在我的 excel 程序中使用 match 函数,但我遇到了问题,因为它只选择相同的匹配项。例如,如果您将一个带有“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  

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

在此先感谢您的帮助 !

4

2 回答 2

5

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

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

因此,=MATCH("*Banana*",C8,0)返回1if C8contains "Banana choco"

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

myResult = IsNumeric(Application.Match("*" & ActiveCell.Value & "*", elementsListRange, 0))

如果该范围内有许多句子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
于 2013-04-23T09:10:43.850 回答
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

要将其与范围一起使用:

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

请注意searchStrandmatchStr是变体,因此您可以将值从 Excel 单元格传递给它。

于 2013-04-23T10:45:59.443 回答