В порядке рассуждения... а действительно нужно именно уничтожать элемент массива?
Когда сталкиваюсь с такой проблемой, то для себя выбираю другую схему - можно ведь сохранять в уничтоженный элемент некий маркер, обозначающий, что элемент уничтожен, и в дальнейшем, при обращении к нему, переходить к следующему.
Для числовых массивов это может быть 0 или -1 (имею ввиду, то число, которое заведомо не встречается в элементах), для строк лучше всего было бы за маркер брать vbNullString...
Все это, конечно, меняет логику обращения с массивом и требует проверок, но лично для меня упрощает работу с массивом не тратя сил на перестановки...
Если массив долгоживущий и требуется дополнять его, то придется конечно в Add-процедуру вставить все же цикл, для поиска первого "несуществующего"... если требуется еще и знать сколько всего элементов в массиве (существующих), то то в Remove-процедуре и Add-процедуре понадобится увеличение\уменьшение некоего счетчика...
Но если задача именно стоит в уничтожении, то можно попробовать кроме предложенных выше способов еще и классы, и вот уже в коллекции классов уничтожать элемент set A(85)=Nothing... только проблему с определением величины такой коллекции и раздуванием массива при работе не решишь...
Т.е. все зависит от решаемой задачи - м.б. все же разумным будет и постоянная замена удаленного элемента последним... но последний элемент (пустой) будет существовать в качестве пустого, и понадобится переменная-счетчик все равно...
кажется я усложнил задачу нежели упростил, но тема мне показалось интересной