VBA:使用split函数将多个字符串与另一个字符串进行比较

时间:2014-10-23 20:21:15

标签: excel vba

我试图用VBA中的分割函数制作一个等式 需要拆分的字符串来自Excel工作表并在单元格中查找如下: text1; tex2; text3

我在变量中加载它,所以我得到以下内容:

string1 = "text1;text2;text3"
string2 = "text2"

现在我要做的是以下

If string2 = Split(string1, ";", , CompareMethod.Text) Then
    'Do something
End If

但是这个approuch似乎引发了一个错误。
这是我第一次使用拆分功能,所以我猜测我使用它都错了:)

4 个答案:

答案 0 :(得分:0)

您需要隔离从Split函数返回的每个元素。 Split函数将字符串转换为字符串数组。

数组可以使用For...Each结构进行迭代,因此您可以这样做:

Dim string1 as String
Dim string2 as String
Dim arrString as Variant
Dim str as Variant

string1 = "text1;text2;text3"

string2 = "text2"

For each str in Split(string1, ";", , CompareMethod.Text)
    If str = string2 Then
        'Do something
    End If
Next

答案 1 :(得分:0)

这有点像黑客,但你可以用分隔符包装每个字符串并在一行中完成,如下所示:

If InStr(1, ";" & string1 & ";", ";" & string2 & ";", vbTextCompare) > 0 Then
    'do something
End If

作为旁注,这比分割和循环更快(特别是如果有很多成员要搜索)。与用于附加分隔符的两个分配相比,分割和循环中的字符串分配是昂贵的,然后是非常快的InStr函数。如果你不使用vb​​TextCompare,速度会更快。

  • 快速
  • 简明

明智地选择您的分隔符。我喜欢(Alt + 0149),因为它很容易看到并且作为文本条目非常罕见。

答案 2 :(得分:0)

你也可以试试这个:

If Not IsError(Application.Match(string2, Split(string1, ";"), 0)) Then
    '~~> Do some cool stuff
End If

如果您只想检查string2string1的存在,请使用此选项 实际上,与利马所发布的内容相同 如果您想为每次事件做一些事情,那么请使用David的路线。 HTH。

答案 3 :(得分:0)

您还可以使用Filter返回针对Split源字符串的匹配数组(不会遍历Split字符串)

Dim str1 As String
Dim str2 As String
Dim vArr
str1 = "text1;text2;text3"
str2 = "text2"
vArr = Filter(Split(str1, ";"), str2, True, vbBinaryCompare)
If Len(Join(vArr, ",")) > 0 Then MsgBox "do something"