Hola, fijate si te sirve este ejemplo que arme, esta hecho rapidamente, pero parece que funciona, genera los aleatorios y respeta los valores limites de cada linea.
Private Sub Command1_Click()
Dim vNumero As Integer
Dim vMinimo As Integer, vMaximo As Integer
Dim vCadena As String
Dim vFila As Integer, vColumna As Integer
For vFila = 1 To 5 'Filas
vMinimo = IIf(vFila = 1, 1, ((vFila - 1) * 15) + 1)
vMaximo = (vFila * 15)
Dim ret() As Variant
ret = Generar(vMaximo, vMinimo, 5)
For vColumna = 0 To 4 'Columnas
vCadena = vCadena & ret(vColumna) & vbTab
Next vColumna
vCadena = vCadena & vbNewLine
Next vFila
Debug.Print vCadena
End Sub
Public Function Generar(ByVal pMaximo As Integer, Optional ByVal pMinimo As Integer = 1, Optional ByVal pCantidad As Integer = 1) As Variant
Dim x As Integer, n As Integer
Dim arrNumeros() As Variant
Dim vCollecion As New Collection
ReDim arrNumeros(pCantidad - 1)
With vCollecion
For x = pMinimo To pMaximo
.Add x
Next x
For x = 0 To pCantidad - 1
n = NumeroAleatorio(0, vCollecion.Count + 1)
arrNumeros(x) = vCollecion(n)
vCollecion.Remove n
Next x
End With
Set vCollecion = Nothing
Generar = arrNumeros
End Function
Public Function NumeroAleatorio(ByVal pMaximo As Integer, ByVal pMinimo As Integer) As Integer
Randomize
NumeroAleatorio = Int((pMaximo - pMinimo + 1) * Rnd + pMinimo)
End Function
usa esa funcion para poder alamcenar los numeros ya generados en la linea y que no se repita el numero aleatorio generado por linea.
saludos.