Страницы: 1
RSS
Помогите "вычесть" один файл из другого
 
Здравствуйте друзья! Возникла задача, не получается с ней никак справиться. Суть в том, что имеется 2 файла, в одном около 30000 строк, с ФИО и д.р, в другом 36000 строк, в котором тоже ФИО и д.р. Задача состоит в том, чтобы из 1 файла исключить тех людей, которые есть во втором.  
Пробовал различными утилитами типа ExcelCompare, пробовал средствами Exclt через "Удалить дубликаты", вообщем кучу способов перепробывал, ничего не получается.    
Помогите люди добрые.  
Прикрепляю скрины и образцы файлов
 
{quote}{login=vincently}{date=13.11.2012 09:48}{thema=Помогите "вычесть" один файл из другого}{post}  
Прикрепляю скрины и образцы файлов{/post}{/quote}  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Протакать нарушителям? - 124, однако - перебор...  
Проще, короче, понятнее...
 
Может так?
Оружие не убивает Человека! Человек убивает Человека!!!
 
Вот зачем там такие прожорливые скрины вообще и в bmp в частности? (хотя нужно признать, что bmp в rar жмётся лучше всех других форматов :))  
А формулу СЧЁТЕСЛИ() с доп.столбцом не пробовали?  
 
Хотя я бы на такие объёмы делал макросом (тем более что он уже давно написан, чуть только по месту подпилил..) - вот для простоты скопировал данные второго файла на второй лист первого, хотя можно брать кодом данные и прямо из другого файла.  
 
 
Option Explicit  
 
'Макросом -  
'1.два диапазона в два массива  
'2.создание массива для результатов  
'3.один перебор n значений массива в словарь  
'4.m проверок массива на наличие в словаре и заполнение данными массива результата  
'5.выгрузка результатов (тут нет предварительной очистки диапазона)  
 
Sub compare()  
   Dim a(), b(), c(), i As Long, ii As Long, x As Byte  
 
   '1.  
       a = Sheets(1).UsedRange.Value  
       b = Sheets(2).UsedRange.Value  
 
   '2.  
   ReDim c(1 To UBound(a), 1 To 4)  
 
   With CreateObject("Scripting.Dictionary")  
     
       '3.  
       For i = 1 To UBound(b)  
           .Item(b(i, 1) & "|" & b(i, 2) & "|" & b(i, 3) & "|" & CStr(b(i, 4))) = 0&  
       Next  
 
       '4.  
       For i = 1 To UBound(a)  
           If Not .exists(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3) & "|" & CStr(a(i, 4))) Then  
               ii = ii + 1  
              For x = 1 To 4: c(ii, x) = a(i, x): Next  
           End If  
       Next  
   End With  
 
   '5.  
   With Sheets(3)  
       .[A1].Resize(ii, 4) = c
       .Activate  
   End With  
 
End Sub  
 
 
 
Может быть вопрос по  
CStr(массив(i, 4)))  
Но это уже по месту нужно смотреть.  
Если всюду настоящие даты - то Cstr() можно не применять.  
Если есть варианты - может быть наоборот нужно применить CDate().  
Ну и так же по месту может не подойти приём с UsedRange.Value - может натянуть много мусора...  
Но какой пример - такой и код.
 
{quote}{login=Borodets}{date=13.11.2012 10:33}{thema=}{post}Может так?{/post}{/quote}  
Спасибо большое!!! Все получилось!!!
Страницы: 1
Читают тему
Наверх