比较2个数组

use*_*624 1 excel vba excel-vba excel-2010

我正在比较VBA for Excel 2010中的两个数组。这是我的示例代码:

Dim vArray1 As Variant
Dim vArray2 As Variant

Set wb1 = ActiveWorkbook
Set myTable = wb1.Worksheets(3).ListObjects("Table3")

vArray1 = myTable.DataBodyRange
vArray2 = wb1.Worksheets(2).Range("B1:B" & lRow1).Value

k = 1

For i = LBound(vArray1) To UBound(vArray1)
   For j = LBound(vArray2) To UBound(vArray2)
      If vArray1(i, 1) = vArray2(j, 1) Then
         ' Do nothing
      Else
         vArray3(k, 1) = vArray1(i, 1)
         k = k + 1
      End If
   Next
Next
Run Code Online (Sandbox Code Playgroud)

我想将表3中的列1与存储在vArray2中的范围进行比较。

vArray1中存在但vArray2中不存在的任何值都需要存储在vArray3中。不幸的是,我无法做到这一点。任何援助将不胜感激。

L42*_*L42 6

Edit1:我已经重新编写了您的循环,这就是我认为的问题的原因。如果未提供,则UboundLbound会采用第一个尺寸。因此,您执行的方法及以下方法应返回正确的上限和下限。但是,当然,在处理2D数组时最好明确一些。同样,vArray3应该具有Dimensioned。我没有在您的代码中看到它。还添加了一个布尔变量。

ReDim vArray3 (1 to 10, 1 to 2) '~~> change to suit
Dim dup As Boolean: k = 1
For i = LBound(vArray1, 1) To UBound(vArray1, 1) '~~> specify dimension
    dup = False
    For j = LBound(vArray2, 1) To UBound(vArray2, 1) '~~> specify dimension
        If vArray1(i, 1) = vArray2(j, 1) Then
            dup = True: Exit For
        End If
    Next j
    If Not dup Then '~~> transfer if not duplicate
        vArray3(k, 1) = vArray1(i, 1)
        k = k + 1
    End If
Next I
Run Code Online (Sandbox Code Playgroud)

或者您可以像这样使用match:

'~~> Use 1D array instead by using Transpose
vArray2 = Application.Transpose(wb1.Worksheets(2).Range("B1:B" & lRow1))
For i = LBound(vArray1, 1) To UBound(vArray1, 1) '~~> specify dimension
    If IsError(Application.Match(vArray1(i, 1), vArray2, 0)) Then
        vArray3(k, 1) = vArray1(i, 1)
        k = k + 1
    End If
Next i
Run Code Online (Sandbox Code Playgroud)