我正在比较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中。不幸的是,我无法完成这件事。任何帮助将不胜感激。
答案 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