Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2011, 16:06   #1
MASRUB
 
Регистрация: 24.12.2010
Сообщений: 8
По умолчанию Сравнение 2х листов, и если нет совпадений удаление.

Помогите отредактировать макрос:
То что он сейчас выполняет, сверяет данные из листа1 на листе2, если есть совпадение, то удаляет их на Листе 1.
А нужно изменить код, что бы сверял данные лист 1 и лист 2, и если небыло совпадений, то удалял строчку из лист 1, а те которые совпадают с Лист 2 оставлял.

Код:
Dim a, b, i As Long, j As Long

With Sheets("Лист1")
a = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
End With
With Sheets("Лист2")
b = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Value
End With
For i = UBound(a) To 1 Step -1
For j = 1 To UBound(b)
If a(i, 1) = b(j, 1) Then Sheets("Лист1").Rows(i).EntireRow.Delete
Next j, i

End Sub

Последний раз редактировалось MASRUB; 29.04.2011 в 16:46.
MASRUB вне форума Ответить с цитированием
Старый 29.04.2011, 17:22   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Так, наверное
Код:
Sub MASRUB()
Dim a, i As Long, j As Long, rd As Range
With Sheets("Лист2")
    a = .Range(.[a1], .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1): .Item(a(i, 1)) = 1: Next i
    a = Range([a1], Cells(Rows.Count, 1).End(xlUp)).Value
    For i = 1 To UBound(a, 1)
        If Not .Exists(a(i, 1)) Then
            If rd Is Nothing Then Set rd = Cells(i, 1) Else Set rd = Union(rd, Cells(i, 1))
        End If
    Next
End With
If Not rd Is Nothing Then rd.EntireRow.Delete
End Sub
Активным должен быть лист Лист1
nilem вне форума Ответить с цитированием
Старый 03.05.2011, 10:15   #3
MASRUB
 
Регистрация: 24.12.2010
Сообщений: 8
По умолчанию

Большое спасибо за ответ, а как еще добавить строчечку что бы просто совпадения копировались на новый лист, скажем "Лист3"?
MASRUB вне форума Ответить с цитированием
Старый 03.05.2011, 11:11   #4
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от MASRUB Посмотреть сообщение
Большое спасибо за ответ, а как еще добавить строчечку что бы просто совпадения копировались на новый лист, скажем "Лист3"?
Код:
Sub MASRUB2()
Dim a, b(), i As Long, j As Long
With Sheets("Лист2")
    a = .Range(.[a1], .Cells(Rows.Count, 1).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 1 To UBound(a, 1): .Item(a(i, 1)) = 1: Next i
    a = Range([a1], Cells(Rows.Count, 1).End(xlUp)).Value
    ReDim b(1 To UBound(a), 1 To 1)
    For i = 1 To UBound(a, 1)
        If .Exists(a(i, 1)) Then j = j + 1: b(j, 1) = a(i, 1)
    Next
End With
Sheets("Лист3").[a1].Resize(j).Value = b
End Sub
В предыдущем посте j As Long лишняя - остаточные явления.
nilem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух диапазонов и удаление совпадений ПОСТРОЧНО (доработка) pringls Microsoft Office Excel 2 26.01.2011 16:54
Подсчет совпадений, если... Sharrik Microsoft Office Excel 4 22.09.2010 09:36
Сравнение 2 листов hloppel Microsoft Office Excel 22 12.05.2010 16:38
Сравнение двух листов и вывод в определённой последовательности ОlGa Microsoft Office Excel 1 29.01.2010 21:06
Сравнение листов в книге, и копирование значений Josser Microsoft Office Excel 10 22.07.2009 08:26