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").
在此先感谢您的帮助 !
从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)
使用以下函数,它匹配字符串中的子字符串:
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 单元格中的值传递给它。