比较2个阵列

时间:2014-10-20 01:41:39

标签: vba excel-vba excel-2010 excel

我正在比较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

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

vArray1中存在但vArray2中不存在的任何值都需要存储在vArray3中。不幸的是,我无法完成这件事。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

编辑1:我已经重新编写了一个循环,这是我认为问题的原因。如果未提供, Ubound Lbound 将采用第一个维度。所以你这样做和下面的方式应该返回正确的上限和下限。但是,当然,当你处理2D数组时,最好是明确的。 vArray3 也应 Dimensioned 。我在你的代码中没有看到它。还添加了 Boolean 变量。

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

或者你可以使用这样的匹配:

'~~> 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