Сравнение 2 динамических массивов разных размеров и просмотр количества совпадений

#excel #vba #dynamic-arrays

#excel #vba #динамические массивы

Вопрос:

У меня есть 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. Вы не заполнили массивы, просто установите их размеры.

Ответ №1:

Попробуйте это. Заполните массивы из диапазонов за один раз. Выполните цикл через 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" amp; lastrow).Value)
'MsgBox lastrow

lastrow = ws2.Range("AJ100000").End(xlUp).Row
ISRC2 = Application.Transpose(ws2.Range("AJ1:AJ" amp; 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 amp; " elements of ISRC are in ISRC2 (" amp; Format(count / UBound(ISRC), "0.0%") amp; ")."

End Sub
  

Комментарии:

1. Сработало отлично! Извините, что забыл заполнить массив!