Сравнения двух книг и запись уникальных на новую - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Не пинайте если вопрос таков был я очень долго искал почти месяц не нашел. есть две книги книга1.xlsx и книга2.xlsx в которых сдержаться данные в этих книгах нужно сравнит данные и вывести уникальные. В книгах такие данные. первая ячейка A1 содержит номер телефона, в ячейке B1 еще один номер, в ячейке С1 секунды. В книге2 такие же данные, но секунды могут быт на 1 больше или меньше. Нужно провести поиск и тоест сверит данные с книги 1 и если в книге два есть ети данные пропустит, а если нет сделать поиск заного но уже со второй строки тоест из a2 b2 c2. Мои действия: В новой книге сделал сцепку данных с книги A1 B1 C1 а рядом данные с книги 2 также. и написал поиско3(A1;b1:b300000;0) все работает но так как данныз 3000000 то данные расчитываются почти по 6 часов это очень медленно к меня комп I7 8 ядер. 6 г оперативка. Прилагая книгу в которой все готово формулу не растягиваю до конца в прилагаемом файле иначи у вас будет открыват долго если не зависит.

Решение задачи: «Сравнения двух книг и запись уникальных на новую»

textual
Листинг программы
Option Explicit
 
Sub tt()
    Dim a, b, i&, t$, tt$, k
    With CreateObject("scripting.dictionary"): .comparemode = 1
        a = Workbooks("Книга1").Sheets(1).[a1].CurrentRegion.Value
        For i = 2 To UBound(a)
            .Item(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3)) = i
        Next
        b = Workbooks("Книга2").Sheets(1).[E1].CurrentRegion.Value
        For i = 2 To UBound(b)
            Do
                tt = b(i, 1) & "|" & b(i, 2) & "|"
                t = tt & b(i, 3)
                If .exists(t) Then .Remove (t): Exit Do
                t = tt & (b(i, 3) - 1)
                If .exists(t) Then .Remove (t): Exit Do
                t = tt & (b(i, 3) + 1)
                If .exists(t) Then .Remove (t)
                Exit Do
            Loop
        Next
 
        ReDim b(1 To .Count + 1, 1 To 3): i = 1
        b(1, 1) = "A num": b(1, 2) = "B num": b(1, 3) = "sec"
        For Each k In .items
            i = i + 1
            b(i, 1) = a(k, 1): b(i, 2) = a(k, 2): b(i, 3) = a(k, 3)
        Next
    End With
 
    With Workbooks.Add(1).Sheets(1).[a1].Resize(i, 3)
        .Columns(1).Resize(, 2).NumberFormat = "0"
        .Value = b
        .Columns.AutoFit
    End With
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы