比较VB Excel中的二维数组
我想比较VBA Excel中的两个二维数组。
资源:
1 2 3 4
4 5 6 2
3 3 4 4
目标:
4 5 3 2
1 2 3 4
3 7 7 5
鉴于上述两个二维数组,我将调用源和目标,我想比较从源与整个目标的每一行,并检查它是否存在目标。 对于来自源(1 2 3 4)的示例行1,将被视为与在目标(第2行)中find的匹配项。 所以我需要比较目标中的每一行来源的给定行。 如果源中的行不存在,那么我将需要记下这些以便标记为不存在于目标中。
东西在线(不是真正的代码只是想法):
For i to ubound(srcArray) isFound = False For j To ubound(trgArray) If srcArray(i) = trgArray(j) Then isFound = True If Not isFound Then //make note of some sort
我知道方法工作确定单暗。 arrays。 但是试图在VB或其他方法的某种循环中为2d数组执行此操作。 在Excel中不太熟悉VB。 如果可能的话,我也想看看整个数组的每一行,而不是单独比较每个数组的每个元素。
下面是一个如何循环和比较二维数组元素的例子:
Sub ArrayCompare() Dim MyArr1 As Variant, MyArr2 As Variant, X as long, Y as long MyArr1 = [{1,2,3,4;4,5,6,2;3,3,4,4}]: MyArr2 = [{4,5,3,2;1,2,3,4;3,7,7,5}] For X = LBound(MyArr1) To UBound(MyArr1) For Y = LBound(MyArr1, 1) To UBound(MyArr1, 1) If MyArr1(X, Y) = MyArr2(X, Y) Then MsgBox X & ":" & Y & ":" & MyArr1(X, Y) Next Next End Sub
这里是我更新的代码来比较每行作为一个string(谢谢@Tim威廉姆斯:)):
Sub ArrayCompare() Dim MyArr1 As Variant, MyArr2 As Variant, X As Long, Y As Long MyArr1 = [{1,2,3,4;4,5,6,2;3,3,4,4}]: MyArr2 = [{4,5,3,2;1,2,3,4;3,7,7,5}] For X = LBound(MyArr1) To UBound(MyArr1) For Y = LBound(MyArr2) To UBound(MyArr2) If Join(Application.Transpose(Application.Transpose(Application.Index(MyArr1, X, 0))), "|") = Join(Application.Transpose(Application.Transpose(Application.Index(MyArr2, Y, 0))), "|") Then MsgBox "Found a match at MyArr1 index:" & X & " and MyArr2 index:" & Y Next Next End Sub
如果你真的想避免循环,那么你可以使用这种方法从二维数组中提取出一个“行”作为比较目的,但循环可能会更快。
Sub Tester() Dim arr, rw arr = Range("A1:J10").Value 'get 2-d array from worksheet 'get a 1-d array "row" out of the 2-d array rw = Application.Transpose( _ Application.Transpose(Application.Index(arr, 1, 0))) 'then you can (eg) create a string for comparison purposes Debug.Print Join(rw, Chr(0)) End Sub