Removing
The only way to remove an item from an array is to construct a new array.
Constructing a new array every time though is not very efficient.
The following function can be used to remove individual items from an array.
This function only works with Fixed Arrays.
Public Function Array_RemoveItem(ByVal myArray As Variant, _
ByVal iIndexNo As Integer) As Variant
Dim i As Integer
For i = iIndexNo + 1 To UBound(myArray)
myArray(i - 1) = myArray(i)
Next i
ReDim Preserve myArray(UBound(myArray) - 1)
Array_RemoveItem = myArray
End Function
Public Sub Testing()
Dim myNewArray As Variant
Dim myArray() As String
ReDim myArray(4)
myArray(0) = "one"
myArray(1) = "two"
myArray(2) = "three"
myArray(3) = "four"
myArray(4) = "five"
myNewArray = Array_RemoveItem(myArray, 2)
Stop
End Sub
If you want to remove duplicates from an array, refer to this page.
Using Dummy Values
Instead of constructing a new array you could just change the value to a dummy value.
This function works with Fixed Arrays and Dynamic Arrays.
Public Function Array_ChangeItem(ByVal myArray As Variant, _
ByVal iIndexNo As Integer) As Variant
myArray(iIndexNo) = "#ignore#"
Array_ChangeItem = myArray
End Function
Public Sub Testing()
Dim myFixedArray(4) As String
myFixedArray(0) = "one"
myFixedArray(1) = "two"
myFixedArray(2) = "three"
myFixedArray(3) = "four"
myFixedArray(4) = "five"
myNewArray = Array_ChangeItem(myFixedArray, 2) 'myNewArray = Array_RemoveItem(myArray, 2)
Stop
End Sub
ERASE Statement
The ERASE statement can be used to remove all of the items.
This can be used with both Fixed Arrays and Dynamic Arrays.
This statement will reset all the elements to their default values.
Dim myArray(3) As String 'This is a FIXED array
Debug.Print myArray(0) 'Default value is ""
myArray(0) = "one"
myArray(1) = "two"
myArray(2) = "three"
myArray(3) = "four"
Debug.Print myArray(0) '= "one"
Erase myArray
Debug.Print myArray(0) '= "" (resets to default value)
REDIM Statement
The REDIM statement can be used to remove all of the items.
This can only be used with Dynamic Arrays.
Dim myArray() As String 'This is a DYNAMIC array
ReDim myArray(3)
myArray(0) = "one"
myArray(1) = "two"
myArray(2) = "three"
myArray(3) = "four"
Debug.Print myArray(0) '= "one"
Erase myArray
Debug.Print myArray(0) '= "" (resets to default value)
It is possible to use the Preserve keyword to remove only some of the values.
Collection Object
VBA does include a built-in Collection Object that allows items to be easily removed.
Dim myCollection As VBA.Collection
Set myCollection = New VBA.Collection
myCollection.Add "Item 1"
myCollection.Remove "Item 1"
© 2023 Better Solutions Limited. All Rights Reserved. © 2023 Better Solutions Limited TopPrevNext