【问题标题】:Difference between two 2D arrays in VBAVBA中两个二维数组之间的区别
【发布时间】:2020-11-19 04:36:18
【问题描述】:

我正在尝试获取 excel VBA 中两个数组之间的差异。

我在这里找到了我想要实现的解决方案:Solution

但它似乎只适用于一维数组。

这里有一个我想要实现的示例:

我尝试修改找到的代码并使用锯齿状数组,但没有成功。 我在这条线上得到了error 13 type mismatchcoll.Add arr1(i, j), arr1(i, j)

这就是我的代码现在的样子:

        Sub Test()

Dim arr1 As Variant
Dim arr2 As Variant
Dim arr3 As Variant
Dim coll As Collection
Dim i As Long, j As Long

With Worksheets("Sheet2")
    LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr1 = .Range("A1:C" & LastRowColumnA).Value
End With

With Worksheets("Sheet1")
    LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr2 = .Range("A1:C" & LastRowColumnA).Value
End With
Set coll = New Collection
For i = LBound(arr1, 1) To UBound(arr1, 1)
    For j = LBound(arr1, 2) To UBound(arr1, 2)
        coll.Add arr1(i, j), arr1(i, j)
    Next j
Next i

For i = LBound(arr2, 1) To UBound(arr2, 1)
    For j = LBound(arr2, 2) To UBound(arr2, 2)
        On Error Resume Next
        coll.Add arr2(i, j), arr2(i, j)
        If Err.Number <> 0 Then
            coll.Remove arr2(i, j)
        End If
        On Error GoTo 0
   Next j
Next i

ReDim arr3(1 To coll.Count, 1 To 1)

For i = 1 To coll.Count
    arr3(i, 1) = coll(i)
    Debug.Print arr3(i, 1)
Next i

Worksheets("Sheet2").Range("F1").Resize(UBound(arr3, 1), 1).Value = arr3
End Sub

有人知道怎么解决吗?

【问题讨论】:

    标签: excel vba multidimensional-array array-difference


    【解决方案1】:

    所以这里我们有解决方案:

    Sub test()
    
    Dim arr1 As Variant
    Dim arr2 As Variant
    Dim arr3 As Variant
    Dim coll As Collection
    Dim i As Long, j As Long, ii As Long, txt As String, x
    
    With Worksheets("Sheet2")
        LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr1 = .Range("A1:C" & LastRowColumnA).Value
    End With
    
    With Worksheets("Sheet1")
        LastRowColumnA = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr2 = .Range("A1:C" & LastRowColumnA).Value
    End With
    Set coll = New Collection
    On Error Resume Next
    For i = LBound(arr1, 1) To UBound(arr1, 1)
        txt = Join(Array(arr1(i, 1), arr1(i, 2), arr1(i, 3)), Chr(2))
        coll.Add txt, txt
    Next i
    
    For i = LBound(arr2, 1) To UBound(arr2, 1)
        txt = Join(Array(arr2(i, 1), arr2(i, 2), arr2(i, 3)), Chr(2))
        Err.Clear
        coll.Add txt, txt
        If Err.Number <> 0 Then coll.Remove txt
    Next i
    
    ReDim arr3(1 To coll.Count, 1 To 3)
    
    For i = 1 To coll.Count
        x = Split(coll(i), Chr(2))
        For ii = 0 To 2
            arr3(i, ii + 1) = x(ii)
        Next
    Next i
    
    Worksheets("Sheet2").Range("F1").Resize(UBound(arr3, 1), 3).Value = arr3
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      相关资源
      最近更新 更多