rCell1包含CSV分隔文本,例如"摩天大楼,大房子,小房子"。我想检查其中任何一个是否与rCell2中的任何逗号分隔值匹配。 rCell2可以包含的例子是" Big House,Big Dog,Big Rock"。
详细说明: * rCell1或rCell2也可能不包含任何逗号。 *如果rCell1或rCell2为空,那么我们没有匹配。 *应忽略子串开头和结尾的空格。
有什么聪明的方法可以在VBA中执行此操作吗?
以下是可行的代码,但它会匹配" House"和#34; Big House",我不想做。
If rCell = "" Then
'Do nothing
Else
For Each vCriteria In vCriteriaArray
If InStr(1, "," & rCell.Value & ",", "," & vCriteria & ",", vbTextCompare) <> 0 Then
bMatch = True
Exit For
End If
Next vCriteria
If Not bMatch Then rCell.EntireRow.Hidden = True
End If
答案 0 :(得分:0)
选项1:使用拆分功能:myArray1() = Split(rCell1, ",")
...将字符串拆分为数组。然后对两个数组进行排序以获得更有效的比
选项2 :(最终再次使用Split
)将rcell1的所有子项添加到集合中,然后尝试将rcell2的所有子项添加到同一集合中。重复项会发生冲突并产生错误。
答案 1 :(得分:0)
用逗号分割并将值输入2个数组,然后遍历数组以检查匹配。
您还可以使用System.Collections.ArrayList对象进行更快速的比较,因为它有一个可以访问的布尔.Cointains
方法。
以下是使用Split()
函数的解决方案。
vArr1 = Split(rCell1, ",")
vArr2 = Split(rCell2, ",")
For Each vItem1 In vArr1
For Each vItem2 In vArr2
If vItem1 = vItem2 Then
bMatch = True
Exit For
Next vItem2
If bMatch Then Exit For
Next vItem 1