removing items from an array

How do I do the following:

I have a dynamic array: ItemList() and it contains the following 7 items of data:

Bob
Anne
Jane
Mary
Tim
Jack
John

along the way, items are tagged as no longer availible and I've replaced them with [REMOVED] so my list of 7 items now reads:

Bob
Anne
[REMOVED]
Mary
Tim
[REMOVED]
John

whats the best way to take away the [REMOVED] items so i am left with an array of 5 items:

Bob
Anne
Mary
Tim
John

Cheers,

`Andy
LVL 2
xizorAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
JR2003Connect With a Mentor Commented:
This should do the trick:

Private Sub Command1_Click()
    Dim MyArray() As String
    ReDim MyArray(1 To 5)
    MyArray(1) = "qwe"
    MyArray(2) = "[REMOVED]"
    MyArray(3) = "qwe"
    MyArray(4) = "[REMOVED]"
    MyArray(5) = "qwe"
    Dim i As Long
    Dim j As Long
    j = 0 'Initialise
    For i = LBound(MyArray) To UBound(MyArray)
        If (i + j) > UBound(MyArray) Then Exit For
        If MyArray(i + j) = "[REMOVED]" Then
            j = j + 1
        End If
        If j <> 0 And (i + j) <= UBound(MyArray) Then
            MyArray(i) = MyArray(i + j)
        End If
    Next i
    If j <> 0 Then
        ReDim Preserve MyArray(LBound(MyArray) To UBound(MyArray) - j)
    End If
End Sub
0
 
xizorAuthor Commented:
Thanks!
0
 
JR2003Commented:
Ooops, I just realised there is a bug in the code I just geve you.
This version works
JR

Private Sub Command1_Click()
    Dim MyArray() As String
    ReDim MyArray(1 To 6)
    MyArray(1) = "[REMOVED]"
    MyArray(2) = "[REMOVED]"
    MyArray(3) = "[REMOVED]"
    MyArray(4) = "QWE4"
    MyArray(5) = "[REMOVED]"
    MyArray(6) = "[REMOVED]"
    Dim i As Long
    Dim j As Long
    j = 0 'Initialise
    For i = LBound(MyArray) To UBound(MyArray)
        If i + j > UBound(MyArray) Then Exit For
        MyArray(i) = MyArray(i + j)
        While (MyArray(i) = "[REMOVED]") And (i + j) < UBound(MyArray)
            j = j + 1
            MyArray(i) = MyArray(i + j)
        Wend
    Next i
    If j <> 0 Then
        ReDim Preserve MyArray(LBound(MyArray) To UBound(MyArray) - j - LBound(MyArray))
    End If
    For i = LBound(MyArray) To UBound(MyArray)
        Debug.Print MyArray(i)
    Next i
End Sub

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.