Está complicado porque la funcion devuelve la matriz sin usar el elemento ni el valor 0, pero tambien te has complicado la vida creando 2 matrices para la posicion, y creo que eso es lo que genera tu problema de superposicion.
Te he creado este nuevo código que solo necesita añadirle la función "Generar_Aleatorio" que no la incluyo por no repetir. Lleva una matriz de 5 imagenes y un command1.
Código vb:
Ver originalPrivate Type Posicion
X As Single
Y As Single
End Type
Dim Posiciones(4) As Posicion
Private Sub Form_Load()
Dim f As Integer
Image1(0).Picture = LoadPicture("foto1.jpg")
Image1(1).Picture = LoadPicture("foto2.jpg")
Image1(2).Picture = LoadPicture("foto3.jpg")
Image1(3).Picture = LoadPicture("foto4.jpg")
Image1(4).Picture = LoadPicture("foto5.jpg")
' guardamos las posiciones
For f = 0 To 4
Posiciones(f).X = Image1(f).Left
Posiciones(f).Y = Image1(f).Top
Next f
End Sub
Private Sub Command1_Click()
Dim MatrizAleatoria() As Integer
Dim f As Long
' cargamos la matriz
MatrizAleatoria = Generar_Aleatorio(5)
' recolocamos las imagenes
For f = 0 To 4
Image1(f).Left = Posiciones(MatrizAleatoria(f + 1) - 1).X
Image1(f).Top = Posiciones(MatrizAleatoria(f + 1) - 1).Y
Next f
End Sub
Saludos