Hola Empar:
Te hice un ejemplo, para probarlo abre un proyecto nuevo, coloca un botón de comando y pega el sig. código:
'*****************************
Dim v() As Long
Option Explicit
Private Sub Command1_Click()
Dim Texto As String
Dim X As Long
AgregarElemento
For X = 1 To UBound(v)
Texto = Texto & v(X) & vbCrLf
Next
MsgBox Texto
End Sub
Private Sub AgregarElemento()
Dim I As Long
Dim X As Long
Dim YaExiste As Boolean
Dim NuevoIndice As Long
I = Int(Rnd * 19) ' cambiar por lo que sea
YaExiste = True
Do Until Not YaExiste
YaExiste = False
For X = 1 To UBound(v)
If v(X) = I Then
YaExiste = True
I = Int(Rnd * 19) ' cambiar por lo que sea
Exit For
End If
Next
Loop
NuevoIndice = UBound(v) + 1
ReDim Preserve v(NuevoIndice)
v(NuevoIndice) = I
End Sub
Private Sub Form_Load()
ReDim v(0) ' inicializo el vector con la posicón 0 que luego nuca uso, lo voy a usar a partir de la 1, pero hago esto para que despues ya esté inicializado y no me de error
End Sub
'*****************************
Tené en cuenta que por ejemplo, en este caso, una vez que ya hay 19 elementos ingresados se queda indefinidamente buscando cual agregar, pero resulta que como ya están los 19 no encuentra uno que no esté y no sale más del loop, si en tu caso puede pasar algo parecido tendrías que ponerle una validación o protección para que eso no ocurra.
Saludos,
Javier