2014-10-20 130 views
1

我比較在VBA兩個數組用於Excel 2010年這裏是我的示例代碼:比較2個陣列

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 

我想要做的第1列的表3與存儲在vArray2範圍內的比較。

任何存在於vArray1中但不存在於vArray2中的值需要存儲在vArray3中。不幸的是,我無法完成這件事。任何援助將不勝感激。

回答

3

編輯1:我已經重寫了你的循環,這是我認爲的問題的原因。 未平倉平倉假設沒有提供第一個維度。所以你在下面做的方式應該返回正確的上限和下限。但是,當然,在處理二維數組時最好明確一下。另外vArray3應該是尺寸。我沒有在你的代碼中看到它。還增加了一個布爾型變量。

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 
+0

優秀的,這正是我想要的。非常感謝您的幫助。 – user2036624 2014-10-20 03:49:02