Страницы: 1
RSS
Сравнить два списка
 
ВСем привет!  
 подскажите пожалуйста как сравнить два списка, которые находятся на разных листах и при совпадении одинаковое значение удалить из обоих списков.  
   
пример во вложении.
bob
 
{quote}{login=bob}{date=06.01.2010 02:18}{thema=Сравнить два списка}{post}ВСем привет! подскажите пожалуйста как сравнить два списка, которые находятся на разных листах и при совпадении одинаковое значение удалить из обоих списков.    
пример во вложении.{/post}{/quote}  
Вариантов море. Можно ВэПээРить, пометить ч\з ИНДЕКС с ПОИСКПОЗ... Далее - ручками ч\з делет... Или поменять задачу - собрать уникальные из двух... Надо автоматом - учимся, пишем макрос...  
ps Есть раздел "Приемы", рекомендую... А может кто ради тренировки за вас сделает...  
Z.
 
Или набрать в окошке поиска: "удалить строку по условию" :-)
 
А может хотя бы приблизительное, что нибуть подскажите. Просто хотя бы с чего нибудь начать. Может кто то уже раньше задавал такой вопрос.
 
Если средствами VBA, за основу можно взять процедуру по выделению уникальных от Уокенбаха, ее можно выстроить для Вашей задачи. Выполнить необходимо следующее:  
 
Создать массив в два столбца - в одном значения из обоих листов, в другом имена листов. Далее передаем массив процедуре и фильтруем уникальные. Затем, что осталось, возвращаем по значениям имен второго столбца. Собственно все.  
 
На листе базы задача посложнее восстановить базу - для динамически меняющегося диапазона - это довольно замысловатая задача - сложно потому, что не понятно от чего отталкиваться, а сохранять пошагово все состояния базы... Проблематично.
 
В редакторе на листе "Заказ" наберите макрос и    
привяжите его к своей кнопке "Удалить совпадения с базой"  
 
Option Explicit  
Option Base 1  
Private Sub CommandButton1_Click()  
 
Dim iRange As Range  
Dim i As Long  
Dim iText() As Variant  
Dim iLastRow As Long  
 
'поиск последней строки в столбце А на листе База  
iLastRow = Worksheets("База").Cells(Rows.Count, 1).End(xlUp).Row  
   ReDim Preserve iText(iLastRow)  
   For i = 1 To iLastRow       'заполнение массива из Базы  
       Set iText(i) = Worksheets("База").Cells(i, 1)  
   Next  
   'поиск элементов массива на листе Заказ, при совпадении строка удаляется  
       For i = 1 To iLastRow  
Set iRange = Columns(1).Find(What:=iText(i), LookIn:=xlFormulas, LookAt:=xlWhole)  
   If Not iRange Is Nothing Then  
   Do  
       iRange.EntireRow.Delete  
Set iRange = Columns(1).Find(What:=iText(i), LookIn:=xlFormulas, LookAt:=xlWhole)  
   Loop Until iRange Is Nothing  
   End If  
       Next  
End Sub
 
Спасибо все работает. Единственный вопрос как сделать так, если в списке на листе база есть пустые ячейки, то при нажатии на кнопку "удалить совпадения" на листе заказ пустые строки не искались и не удалялись
 
Прикладываю файл. Посмотрите что не так.
 
Всем спасибо вроде разобрался
bob
Страницы: 1
Читают тему
Наверх