Чтобы обнаружить дублирующиеся значения в массиве VBA, в настоящее время я использую функцию, которая проверяет, отличаются ли для каждого значения в массиве последующие значения в массиве:
Public Function ContainsDuplicateKeys() As Boolean
Dim inputKeyArray As Variant
inputKeyArray = MyWorksheet.Range("MyTable[InputKey]")
Dim i As Long
Dim j As Long
For i = LBound(inputKeyArray) To UBound(inputKeyArray)
For j = i + 1 To UBound(inputKeyArray)
If inputKeyArray(i, 1) = inputKeyArray(j, 1) Then
ContainsDuplicateKeys = True
Exit Function
End If
Next
Next
ContainsDuplicateKeys = False
End Function
Чтобы проверить,массив из n значений уникален, этот метод включает в себя сравнение 1 + 2 + ... + (n-1).Таким образом, проверка уникальности 10 000 входов требует до 49 995 000 сравнений, что занимает около 13 секунд.
Наоборот, время, необходимое для выполнения функции «Удалить дубликаты» в Excels для того же количества входов, почти мгновенно,Это подразумевает, что должен быть гораздо более эффективный способ достижения того, что я пытаюсь сделать.Кто-нибудь может подсказать, что это может быть?