Давайте представим следующие данные:
A2:A8
= именованный диапазон rngDistinctNames
B2:B5
= именованный диапазон rngAllNames
Итак, теперь с помощью следующего кода мы можем проверить каждое значение в первом именованном диапазоне относительно второго:
Sub Test()
Dim list1 As Variant, list2 As Variant
Dim list3 As Object: Set list3 = CreateObject("System.Collections.ArrayList")
Dim i As Long
With Sheet1 'Change according to your sheets CodeName to avoid implicit references
'Put named ranges into array (memory) for fast looping
list1 = [rngDistinctNames]
list2 = [rngAllNames]
'Put list1 into an ArrayList
For x = LBound(list1) To UBound(list1)
list3.Add list1(x, 1)
Next x
'Check list2 against arraylist and delete values if need be
For x = LBound(list2) To UBound(list2)
list3.Remove list2(x, 1)
Next x
'Additional, write remaining values from list3
.Range("C2").Resize(list3.Count) = Application.Transpose(list3.ToArray)
End With
End Sub
Это приведет к:
ArrayList
- это только один из вариантов, которые вы можете попробовать. Кроме того, вы можете посмотреть Collection
и Dictionary
, но мне нравится использовать ArrayList
, потому что вы можете проверять list2
значения и удалять их, даже если их нет в ArrayList
, плюс вы можете записать их непосредственно в массив ииспользуйте это где-нибудь на вашем листе с .ToArray
.
Согласно вашему комментарию, если вы хотите Array
из Variant/Data Type
значений, вам просто нужно использовать это же свойство: array = List3.ToArray
вернет просточто:)