Исходя из формулировки вопроса, я предполагаю, что вы пытаетесь извлечь только имена, которые встречаются в ваших данных один раз (именно поэтому сравнение списков из 150 и 160 имен должно выводить только 10 имен, которые встречаются только один раз).
С вашим кодом все в порядке, но нигде в вашем коде вы фактически не обрабатываете / не удаляете дубликаты, попробуйте этот скорректированный код:
Sub dupes()
Dim arrRanges(1) As Excel.Range
Dim dDedupe As New Scripting.Dictionary
Dim lngCounter As Long
Dim rngInspect As Excel.Range
Dim strKey As String
Set arrRanges(0) = Sheets("one").Range("A2:A" & Sheets("one").Cells(Rows.Count, 1).End(xlUp).Row)
Set arrRanges(1) = Sheets("two").Range("A2:A" & Sheets("two").Cells(Rows.Count, 1).End(xlUp).Row)
For lngCounter = 0 To 1
For Each rngInspect In arrRanges(lngCounter).Cells
strKey = CStr(rngInspect.Value)
If dDedupe.Exists(strKey) Then
dDedupe(strKey) = dDedupe(strKey) + 1
Else
dDedupe.Add strKey, 1
End If
Next rngInspect
Next lngCounter
For Each Key In dDedupe.Keys()
If dDedupe(Key) > 1 Then dDedupe.Remove Key
Next Key
'Output
Sheets("three").Range("A2").Resize(dDedupe.Count).Value = Application.Transpose(dDedupe.Keys())
End Sub
Эта подпрограмма будет подсчитывать вхождения каждогоname, а затем удалите все имена, встречающиеся более одного раза.
Более эффективный способ сделать это - сохранить все имена в массиве (вместо сохранения двух разных диапазонов в массиве) и выполнить циклчерез этот массив вместо доступа к каждой ячейке один за другим.