【发布时间】:2015-05-12 06:41:06
【问题描述】:
我有一个数组,其中包含一堆常用术语,用于表示该字段正在等待采购订单。然后我有一个循环向后遍历一大列数据,删除单元格中的值与数组中的任何项都不匹配的任何行。为此,我使用一个函数(我在网上找到)来测试该值是否存在于数组中。
到目前为止一切顺利,只要单元格中的值与数组中的值完全匹配。出错的地方是如果单元格包含对常用术语之一的轻微变化(即“TBC - 稍后会跟进”,甚至只是“TBC”而不是“TBC”)
我需要一种方法来获取单元格中的值并对数组中的值进行通配符搜索。我不会粘贴我所有的代码(现在这是一个开发中期的混乱),但如果我们可以在下面实现它,我可以应用它。
Sub TestFilterArray()
MyArray = Array("tbc", "awaiting po", "po to follow")
If IsInArray("tbc xyz", MyArray) = False Then
MsgBox "No! Item is not in the array"
Else
MsgBox "Yes! Item is in the array"
End If
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = UBound(Filter(arr, stringToBeFound)) > -1
End Function
这当前返回“否!...”,因为“tbc xyz”不在数组中,但如果有意义的话,我希望它返回“是!...”,因为“tbc *”在那里。
感谢任何帮助。
【问题讨论】:
-
部分匹配要使用哪些规则?例如,如果
stringToBeFound只是po,那么应该返回True还是False?如果是返回True,那么MyArray的多词短语中哪些词我们考虑,哪些忽略? -
感谢您参与帮助@RonRosenfeld 非常好的一点!理想情况下,stringToBeFound 中的整个字符串都应在两端使用通配符。所以“等待 po - xyz”将返回 true,但“等待 xyz po”将返回 false。
-
查看我的答案中的代码
-
MyArray中的字符串是 contains 搜索词,因此我们正在检查StringToBeFound中的值是否 contains 任何字符串存储在MyArray内。因此,stringToBeFound中的“po”将返回False,因为“po”不包含“等待 po”或“po to follow”。 "123 awaiting po" 将返回True作为字符串 "123 awaiting po" 包含 字符串 "awaiting po"。希望有帮助..