Excel 使用vba拆分数据并进行比较

Excel 使用vba拆分数据并进行比较,excel,vba,Excel,Vba,目前,我面临一个问题,不知道如何解决它。我需要用分隔符“|”拆分元素。并且,仅获取数组[0]和数组[3]中的值。然后我需要将它与另一个字符串[varr]进行比较。arr和varr中的值存储在数组中 比如说, Dim arr As Variant Dim varr As Variant arr = 111|Sample1|Test1 arr = 222|Sample2|Test2 arr = 333|Sample3|Test3 varr = 111|Sample1|Tes

目前,我面临一个问题,不知道如何解决它。我需要用分隔符“|”拆分元素。并且,仅获取数组[0]和数组[3]中的值。然后我需要将它与另一个字符串[varr]进行比较。arr和varr中的值存储在数组中

比如说,

    Dim arr As Variant

    Dim varr As Variant

arr = 111|Sample1|Test1

arr = 222|Sample2|Test2

arr = 333|Sample3|Test3

varr = 111|Sample1|Test5

varr = 222|Sample2|Test4

varr = 333|Sample3|Test3
在这个场景中,我需要遍历arr/varr,并使用分隔符“|”拆分字符串,并连接数组[0]和数组[3]。然后,将其与varr(相同的过程)进行比较。我的代码如下:

    Dim x As Variant, y As Variant
Dim match As Boolean
Dim Result(), Result2() As String
Dim DisplayText, DisplayText1, DisplayText2, DisplayText3, DisplayText4, DisplayText5 As String
For Each x In arr
    match = False
    Result = Split(x, "|")
    DisplayText = Result(0)
    DisplayText1 = Result(2)
    DisplayText2 = DisplayText & DisplayText1
    For Each y In varr
        Result2 = Split(y, "|")
        DisplayText3 = Result2(0)
        DisplayText4 = Result2(2)
        DisplayText5 = DisplayText3 & DisplayText4
        If LCase(DisplayText2) = LCase(DisplayText5) Then
            MsgBox "No Change"
            match = True
        End If
    Next y
    If Not match Then
        MsgBox "Change"
    End If
Next
我得到了这个错误,它指向每个的y。


你知道我为什么会遇到这个错误吗?

我必须添加这个作为答案,因为它不会出现在评论中。
这段代码将执行,但不确定它是否给出了您想要的结果-它可能只是问题的工作副本

Sub Test()

    Dim arr As Variant, varr As Variant
    Dim x As Variant, y As Variant
    Dim Result As Variant, Result2 As Variant
    Dim DisplayText As String, DisplayText1 As String
    Dim Match As Boolean

    arr = Array("111|Sample1|Test1", "222|Sample2|Test2", "333|Sample3|Test3")
    varr = Array("111|Sample1|Test5", "222|Sample2|Test4", "333|Sample3|Test3")

    For Each x In arr
        Result = Split(x, "|")
        DisplayText = Result(0) & Result(2)
        For Each y In varr
            Result2 = Split(y, "|")
            DisplayText1 = Result2(0) & Result2(2)
            If LCase(DisplayText) = LCase(DisplayText1) Then
                MsgBox "No Change"
                Match = True
            End If
        Next y
        If Not Match Then
            MsgBox "Change"
        End If
    Next x

End Sub

y是什么类型?尝试使用
option explicit
并声明所有变量。为了引起您的注意,带有j变量的for循环也没有任何作用。由于在循环中没有引用j,因此它只会多次执行这些操作,而不会更改最终结果。请按照错误的说明操作,并将y变为变量。同样值得注意的是,在x循环中没有出现此错误的原因是因为
Dim x,y as string
仅Dim
y
作为
string
而实际上Dim
x
作为
变量
类型。这里真正重要的是停止像
Dim x这样的声明,y作为字符串
,而将like
Dim x声明为字符串,y作为字符串
或将它们放在单独的行中。若要解决您的问题,
y
必须声明为类型
变量
,而不是
字符串