我试图用VBA中的分割函数制作一个等式 需要拆分的字符串来自Excel工作表并在单元格中查找如下: text1; tex2; text3
我在变量中加载它,所以我得到以下内容:
string1 = "text1;text2;text3"
string2 = "text2"
现在我要做的是以下
If string2 = Split(string1, ";", , CompareMethod.Text) Then
'Do something
End If
但是这个approuch似乎引发了一个错误。
这是我第一次使用拆分功能,所以我猜测我使用它都错了:)
答案 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函数。如果你不使用vbTextCompare,速度会更快。
明智地选择您的分隔符。我喜欢•
(Alt + 0149),因为它很容易看到并且作为文本条目非常罕见。
答案 2 :(得分:0)
你也可以试试这个:
If Not IsError(Application.Match(string2, Split(string1, ";"), 0)) Then
'~~> Do some cool stuff
End If
如果您只想检查string2
中string1
的存在,请使用此选项
实际上,与利马所发布的内容相同
如果您想为每次事件做一些事情,那么请使用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"