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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2015, 15:33   #1
sofa1199
Новичок
Джуниор
 
Регистрация: 26.11.2015
Сообщений: 1
По умолчанию Макрос сортировки по совпадениям

Здравствуйте!
Изучила много подобных тем на вашем сайте, в каждом есть что-то нужное для моего случая, но собрать воедино у меня самостоятельно опыта не хватило. Нужна помощь.
Необходимо сравнить каждое значение столбца 3 "Листа1" со значениями столбца 4 "Листа2". При совпадении: копировать строки только "листа2" полностью на лист "Совпадение", при этом заголовок из "листа2". При несовпадении: копировать всю строку с "листа1" на лист "Несовпадение".
Количество строк исходных двух листов может содержать до 20 тыс.
Вложения
Тип файла: rar пример.rar (3.7 Кб, 17 просмотров)
sofa1199 вне форума Ответить с цитированием
Старый 26.11.2015, 16:11   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

поместите этот
Код:
Sub Compare()
  Dim r As Long, r2 As Long, frg As Range
  r = 2
  Do While Not IsEmpty(Cells(r, 3))
    Set frg = FindAll(Cells(r, 3))
    If frg Is Nothing Then
      With Worksheets("НеСовпадение")
        Cells(r, 3).EntireRow.Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
      End With
    Else
      With Worksheets("Совпадение")
        frg.EntireRow.Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
      End With
    End If
    r = r + 1
  Loop
End Sub


Function FindAll(what As Range) As Range
  Dim urg As Range, rg As Range, adr As String
  With Worksheets("Лист2")
    Set rg = .Columns(4).Find(what, .Cells(1, 4), xlValues, xlWhole)
    If rg Is Nothing Then Exit Function Else Set urg = rg:  adr = rg.Address
    Do While Not rg Is Nothing
      Set urg = Union(rg, urg)
      Set rg = .Columns(4).Find(what, rg, xlValues, xlWhole): If rg.Address = adr Then Exit Do
    Loop
    Set FindAll = urg
  End With
End Function
в программный модуль
выполните Sub Compare() при активном лист1

Удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 26.11.2015 в 16:15.
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для сортировки pupszu Microsoft Office Excel 11 17.08.2011 13:33
Создать макрос сортировки строк ToshaVeric Microsoft Office Excel 2 26.07.2011 22:08
Поиск по совпадениям (delphi) rita3 Помощь студентам 5 09.05.2010 11:49
Макрос умирает после сортировки Skandalius Microsoft Office Excel 17 10.09.2009 16:35
Макрос сортировки строк по листам noname_06 Microsoft Office Excel 8 24.01.2009 20:30