要检测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秒。
相反,对于相同数量的输入,Excel的“删除重复项”功能完成所需的时间几乎是瞬时的。这意味着必须有一种更有效的方法来实现我正在尝试做的事情。谁能建议这可能是什么?
答案 0 :(得分:0)
您可以使用Application.Match()
函数:
Public Function ContainsDuplicateKeys() As Boolean
Dim inputKeyArray As Variant
inputKeyArray = MyWorksheet.Range("MyTable[InputKey]")
Dim i As Long
For i = UBound(inputKeyArray) To LBound(inputKeyArray) Step -1
If Application.Match(inputKeyArray(i, 1), inputKeyArray, 0) <> i Then
ContainsDuplicateKeys = True
Exit Function
End If
Next
End Function