Вот зачем там такие прожорливые скрины вообще и в 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 - может натянуть много мусора...
Но какой пример - такой и код.