Problema con VBA que extrae aleatorios de un Rango

Sub aleatorio()
'Por Dante Amor
Dim cadafila As Range, fila As Long, ini As Long, fin As Long
Dim n As Variant, columna As Variant, valor As Variant
Dim col As Long, sh As Worksheet, i As Long
Dim num As New Collection
Set sh = Sheets("Hoja1")
On Error Resume Next
For Each cadafila In Selection.Rows
Set num = Nothing
fila = cadafila.Row
ini = Columns("A").Column 'rango inicial
fin = ini + sh.Cells(fila, "AD").Value - 1 'rango final
col = Columns("AG").Column 'columna resultados
n = sh.Cells(fila, "AE").Value 'valor cant aleatorios
'
Do While num.Count < n
columna = WorksheetFunction.RandBetween(ini, fin)
valor = sh.Cells(fila, columna).Value
num.Add Item:=valor, Key:=CStr(valor)
Loop
For i = 1 To num.Count
sh.Cells(fila, col).Value = num(i)
col = col + 1
Next
Next
End Submuy buenas noches. La macro anterior fue proporcionada por un experto muy colaborador de esta pagina del cual me encuentro muy agradecido por su ayuda.
La macro trabaja muy bien, pero cuando se presenta en ciertas situaciones se queda pegada y no corre más. Como ilustro en la imagen, la macro extrae aleatoriamente datos de el rango y en la columna "AE" le dice que extraiga en este caso 5 datos aleatoriamente. Y los empiece a pegar a partir de la columna AG, aclaro que la macro trabaja solo la fila donde yo este activo, y en la hoja que este configurada en la macro, en este caso la hoja1. Independientemente de q hoja me encuentre en el libro. El tema es que la macro trabaja bien, pero en las filas q tienen datos completos en el rango.
En la imagen coloque 2 filas: la fila 3, tiene todos los datos llenos hasta la columna "AD" y como se puede apreciar en la foto, allí la ejecute y saco aleatoriamente los 5 números sin problemas. Todo perfecto :)
PERO si la ejecuto en una fila como es la fila 4, como se ve en la imagen, vemos que esta solo tiene datos hasta la columna "T", y así este vacío una sola fila en ese rango, la macro se queda pensando y el libro (no responde) y la única manera es forzar cerrado del libro.
¿Hay alguna manera de que la macro extraiga los datos así no este totalmente lleno el rango?
Dado el caso de que sea muy complicado, pienso en hacer una macro "extra" q reemplace esos valores vacíos por un valor "000" y luego a esta macro de aleatorio, modificarla para que extraiga pero indicándole que ignore ese valor "000" para que no los vaya a incluir en el aleatorio.
Es una opción que doy por si el arreglo a la macro es muy complicado :)

Hola Dante, una duda que consigo con la función Evaluate - Adriel Ortiz Mangia
La función Evaluate es para convertir un nombre de excel a un objeto o a un valor. En este caso estoy creando un arreglo con 1 a n items y al mismo tiempo llena el arreglo con los valore 1,2,3, hasta n. Revisa lo siguiente: https://docs.microsoft.com/en-us/office/vba/api/excel.application.evaluate - Dante Amor
Evaluate, si no es la más, es una de las más poderosas funciones de VBA. - Andy Machin
Muchas gracias Dante y Andy bendiciones - Adriel Ortiz Mangia