Страницы: 1
RSS
Подсчет количества совпадений в двух таблицах на разных листах
 
Задача следующая: на разных листах есть по одной таблице. Таблица и лист будут носить одинаковые названия (удобства ради). Размерность таблиц: один столбец, но разное количество строк. Есть отдельный лист, где нужно вписать в новую таблицу название двух таблиц/листов (название у таблиц и листов будут одинаковые), и должно отобразится количество совпадений.

Можно ли как-то либо через формулу, либо через VBA такое провернуть?
 
Ranker Dark, таблицы всегда в одном месте? т.е. всегда в В3 начало? сколько листов всегда 3?
Изменено: Mershik - 25.11.2020 17:37:34
Не бойтесь совершенства. Вам его не достичь.
 
Да. Таблицы всегда нчинаются в одном месте, но из-за разницы в количестве данных, заканчиваются в разных. В примере листов 3, но может быть и больше
 
Ranker Dark, +  - так - времени просто нет, в пути)
Код
Sub sd()
Dim i As Long, n As Long, k As Long, lr As Long, lr2 As Long, lr3 As Long, sh As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Set sh = Worksheets("Сходства")
lr = sh.Cells(Rows.Count, 2).End(xlUp).Row
For i = 8 To lr
    nn = sh.Cells(i, 2): nn2 = sh.Cells(i, 3)
    Set sh2 = Worksheets(nn)
    Set sh3 = Worksheets(nn2)
    lr2 = sh2.Cells(Rows.Count, 2).End(xlUp).Row
    lr3 = sh3.Cells(Rows.Count, 2).End(xlUp).Row
    If lr2 > lr3 Then
        x = 0
        For n = 3 To lr2
        f = Application.WorksheetFunction.CountIf(sh3.Columns(2), sh2.Cells(n, 2))
            If f > 0 Then
                x = x + 1
            End If
        Next n
    Else
        For n = 3 To lr3
        f = Application.WorksheetFunction.CountIf(sh2.Columns(2), sh3.Cells(n, 2))
            If f > 0 Then
                x = x + 1
            End If
        Next n
    End If
sh.Cells(i, 6) = x
Next i
End Sub
Не бойтесь совершенства. Вам его не достичь.
 
Благодарю. Попробовал ваш макрос, вполне хороший, однако все же не требуется сравнивать все со всеми, а только сделать сравнение у двух из нескольких выбранных таблиц.
 
А что если условия прописать через формулу "если"?
Занимайся тем чем увлекаешься!
 
Цитата
Ranker Dark написал:
все же не требуется сравнивать все со всеми,
так у двух? или всех которые есть на листе 1? он сравнивает построчно что указано на 1 листе
Изменено: Mershik - 25.11.2020 19:18:00
Не бойтесь совершенства. Вам его не достичь.
 
Mershik,Да, там же написано "примеры". Есть несколько таблиц, но сравнить нужно всего 2.
 
Ranker Dark, ну раз написано) ок
Не бойтесь совершенства. Вам его не достичь.
 
Код
Function CompareTables(t1, t2)
    Dim el, elel, cnt
    For Each el In t1
        For Each elel In t2
            If el = elel Then cnt = cnt + 1
        Next
    Next
    CompareTables = cnt
End Function


http://prntscr.com/vpyyc7
Кстати можно юзать ДВССЫЛ для формирования адреса/имени таблиц.
Изменено: Hugo - 25.11.2020 19:44:08
 
Hugo,Благодарю
 
Мы тут посидели ещё чуть ночку... :)
 
Hugo, Благодарю. Позже посмотрю, сейчас не дома. Но все равно, заранее спасибо.
 
Обратите внимание - имена листов в обоих решениях роли не играют.
Страницы: 1
Наверх