测试两个CSV字符串之间是否有匹配?

时间:2014-12-10 13:22:28

标签: vba

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

2 个答案:

答案 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