在VBA中,可以使用以下几种方法来实现数组去重:
- 使用字典(Dictionary)对象:将数组中的元素作为字典的键,然后遍历数组,将元素作为键添加到字典中,最后将字典中的键转换为数组即可。
Dim arr() As Variant Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 假设arr是要去重的数组 For Each element In arr dict(element) = 1 Next element ' 通过转换字典的键为数组 arr = dict.keys
- 使用Collection对象:将数组中的元素添加到Collection对象中,然后使用Collection对象的RemoveDuplicates方法去重,最后将Collection对象转换为数组。
Dim arr() As Variant Dim col As New Collection Dim element As Variant ' 假设arr是要去重的数组 For Each element In arr On Error Resume Next col.Add element, CStr(element) On Error GoTo 0 Next element ' 使用RemoveDuplicates方法去重 RemoveDuplicates col ' 将Collection对象转换为数组 ReDim arr(1 To col.Count) For i = 1 To col.Count arr(i) = col(i) Next i Sub RemoveDuplicates(col As Collection) Dim i As Long For i = col.Count To 2 Step -1 If col(i) = col(i - 1) Then col.Remove (i) End If Next i End Sub
- 使用逐个比较的方式:遍历数组中的元素,逐个与之前的元素进行比较,如果相同则不添加到新的数组中。
Dim arr() As Variant Dim newArr() As Variant Dim i As Long, j As Long Dim isDuplicate As Boolean ' 假设arr是要去重的数组 ReDim newArr(1 To UBound(arr)) j = 1 For i = 1 To UBound(arr) isDuplicate = False For k = 1 To j - 1 If arr(i) = newArr(k) Then isDuplicate = True Exit For End If Next k If Not isDuplicate Then newArr(j) = arr(i) j = j + 1 End If Next i ' 将newArr截断为实际去重后的数组 ReDim Preserve newArr(1 To j - 1) arr = newArr
这些方法可以根据实际情况选择使用。