Сравнение 2-х динамических массивов разных размеров и определение количества совпадающих - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть 2 динамических массива, первый массив которых содержит 15 000 значений и расположен на листе 1. Второй массив имеет 519 значений и расположен на листе 2.

Все значения в первом массиве должны быть во втором массиве, так как первый массив содержит дублированные значения.

То, что я хочу сделать, это сравнить первый массив со вторым массивом и вернуть процент совпадения. (должно быть 100%).

Показанный код просто содержит динамические массивы и начало формулы, чтобы проверить границы массивов как по L, так и по U. Однако я застрял на том, что формула должна сказать.

Dim ws As Worksheet
Dim wb As Workbook

Dim ISRC() As Variant
Dim ISRC2() As Variant    

Set wb = Workbooks("Recordssales2019-04-05")

Dim ws1  As Worksheet
Dim ws2  As Worksheet

Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")

Lastrow = ws1.Range("E100000").End(xlUp).Row
ReDim ISRC(1 To Lastrow + 1)
MsgBox Lastrow

Lastrow = ws2.Range("AJ100000").End(xlUp).Row
ReDim ISRC2(1 To Lastrow + 1)
MsgBox Lastrow

For i = LBound(ISRC) To UBound(ISRC)
    If ISRC(i) = ISRC2(i) Then

Идеально для первого массива сравнивать со вторым массивом и возвращать с совпадением количества одинаковых. Оттуда я хочу сделать следующий шаг, основываясь на том, соответствуют ли они. Если они не совпадают, их не следует включать в следующий шаг.

1 Ответ

0 голосов
/ 10 апреля 2019

Попробуй это. Заполните массивы из диапазонов за один раз. Цикл по ISRC, проверьте, находится ли каждый элемент в другом массиве, используя MATCH, и ведите подсчет.

Sub x()

Dim ws As Worksheet
Dim wb As Workbook, lastrow As Long, i As Long, v As Variant, count As Long

Dim ISRC As Variant
Dim ISRC2 As Variant

Set wb = Workbooks("Recordssales2019-04-05")

Dim ws1  As Worksheet
Dim ws2  As Worksheet

Set ws1 = wb.Worksheets("Recordssales2019-04-")
Set ws2 = wb.Worksheets("Metadata")

lastrow = ws1.Range("E100000").End(xlUp).Row
ISRC = Application.Transpose(ws1.Range("E1:E" & lastrow).Value)
'MsgBox lastrow

lastrow = ws2.Range("AJ100000").End(xlUp).Row
ISRC2 = Application.Transpose(ws2.Range("AJ1:AJ" & lastrow).Value)
'MsgBox lastrow

For i = LBound(ISRC) To UBound(ISRC)
    v = Application.Match(ISRC(i), ISRC2, 0)
    If IsNumeric(v) Then count = count + 1
Next i

MsgBox count & " elements of ISRC are in ISRC2 (" & Format(count / UBound(ISRC), "0.0%") & ")."

End Sub
...