For the purposes I tend to use a collection object in VBA and use its “key” element to uniquely identify my items being added to the collection and extracting it back to another unique array.
This functionality should be implemented as function, its a subroutine only for illustration purposes.
Sub uniqueItems()
Dim repArray(10) As Integer
Dim unqColl As Collection
Dim unqArray() As Integer
Dim iCount As Integer
'--Allocate repArray
repArray(0) = 2
repArray(1) = 2
repArray(2) = 2
repArray(3) = 2
repArray(4) = 2
repArray(5) = 2
repArray(6) = 2
repArray(7) = 2
repArray(8) = 2
repArray(9) = 2
repArray(10) = 20
'--Filtering via Collection
Set unqColl = New Collection
On Error Resume Next
For iCount = 0 To UBound(repArray)
'--The identifying key has to be string
unqColl.Add repArray(iCount), CStr(repArray(iCount))
'--In case of refrential object variables can also use VarPtr for idnetifying unique address
Next iCount
Err.Clear
On Error GoTo 0
'--Resize the unique array based upon the unique items in the collection
ReDim unqArray(unqColl.Count - 1) As Integer
'--Populate the unique array
For iCount = 0 To (unqColl.Count - 1)
unqArray(iCount) = unqColl(iCount + 1)
Next iCount
'--unqArray Content
'unqArray(0) = 2
'unqArray(1) = 20
'--Free up the space
Set unqColl = Nothing
Erase repArray
Erase unqArray
End Sub
1 comment:
Hi. You should try this using a dictionary object instead. Its Exists() function can be used in place of the on error. You can extract values using Keys property. Dictionaries are faster than collections. You should also check out the mscorlib.dll. This can be referenced in vba. It is allows you to access all of .Nets non generic collection objects such as Stack, Queue, ArrayList anx SortedList
Post a Comment