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中。不幸的是,我无法做到这一点。任何援助将不胜感激。
Edit1:我已经重新编写了您的循环,这就是我认为的问题的原因。如果未提供,则Ubound和Lbound会采用第一个尺寸。因此,您执行的方法及以下方法应返回正确的上限和下限。但是,当然,在处理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)
| 归档时间: |
|
| 查看次数: |
9676 次 |
| 最近记录: |