VBA 中两个二维数组之间的差异
Difference between two 2D arrays in VBA
我正在尝试获取 excel VBA 中两个数组之间的差异。
我在这里找到了我想要实现的解决方案:
但它似乎只适用于一维数组。
这里有一个我正在努力实现的示例:
我尝试修改我找到的代码并使用 Jagged Arrays,但没有成功。
我在这条线上得到了 error 13 type mismatch
:coll.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
有人知道怎么解决吗?
所以我们有了解决方案:
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
我正在尝试获取 excel VBA 中两个数组之间的差异。
我在这里找到了我想要实现的解决方案:
但它似乎只适用于一维数组。
这里有一个我正在努力实现的示例:
我尝试修改我找到的代码并使用 Jagged Arrays,但没有成功。
我在这条线上得到了 error 13 type mismatch
:coll.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
有人知道怎么解决吗?
所以我们有了解决方案:
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