Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Сравнение двух массивов чисел

Автор kuzzeba, 01.11.2015, 16:11

« назад - далее »

kuzzeba

Добрый день! Помогите, пожалуйста с такой задачей. Необходимо в excel сравнить два массива чисел. Количество столбцов и строк может быть разным. Необходимо каждую строку из первого массива сравнить с каждой строкой из второго на предмет совпадения чисел и результат вывести в отдельную таблицу. С макросами не очень дружу, но когда-то давно работал в Паскале. В excel голову уже сломал как реализовать...
Если:
X-количество строк 1 массива;
Y-количество столбцов 1 массива;
W-количество строк 2 массива;
Z-количество столбцов 2 массива;
E-искомое количество совпадений в строке;
F-количество совпадений строки первого массива во втором;
То примерный алгоритм решения будет такой:
                               for j=1 to X;
                                 F=0;
                                   for k=1 to W;
                                      d=0;
                                         for i=1 to Y;
                                             for m=Y+3 to Z+Y+2 (второй массив в той же книге);
                               if A(j,i)=B(k,m) then d=d+1
                                   if d=e then C(j,Z+Y+4)=f+1;
Как-то так, примерно...Помогите, пожалуйста, написать макрос для Excel. Заранее благодарен!!!

kuklp

Этот макрос посчитает сколько раз для каждой строки второго массива случатся вхождения строк из первого массива:
Public Sub www()
    Dim i&, j&, a, b
    a = [f4].CurrentRegion.Value
    For i = 2 To UBound(a)
        a(i, 2) = Join(Application.Index(a, i, 0), "|")
        a(i, 1) = 0
    Next
    b = [a3].CurrentRegion.Value
    For i = 2 To UBound(b)
        b(i, 1) = Join(Application.Index(b, i, 0), "|")
    For j = 2 To UBound(a)
        If InStr(1, a(j, 2), b(i, 1)) Then a(j, 1) = a(j, 1) + 1
    Next
    Next
    [k3].Resize(UBound(a), 1) = a
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771