Estuve prácticando hacer un algoritmo sencillo para generar números aletorios porque ya saben el de Visual Studio
tiene muchos errores no me gusta
El principal problema es la semilla que siempre usamos, datos que cambian constantemente como los Ticks del sistema o la hora, pero lamentablemente los procesadores de hoy en día trabajan tan rápido que en un milisegundo se producen miles de números "aletorios" con la misma semilla, y obtenemos horribles patrones o muchos números repetidos.
La función obtiene una cantidad Count de valores entre Min y Max de números pseudoaleatorios.
Public Function RandomEx(ByVal Min As Long, ByVal Max As Long, Optional ByVal Count As ULong = 1) As Long()
RandomEx = New Long() {}
Dim Seed As Long = Date.Now.Ticks
Do While RandomEx.Length <> Count
Array.Resize(RandomEx, RandomEx.Length + 1)
RandomEx.SetValue((Seed Mod (Max + 1)) + Min, RandomEx.Length - 1)
Seed -= Math.Floor(Seed / (Count + 1))
Loop
End Function
Básicamente esto se encarga de colocar a Seed entre Min y Max
(Seed Mod (Max + 1)) + Min
Y esto de mantener a Seed diferente en cada vuelta del búcle, la fórmula asegura que Seed siempre será diferente sin causar Overflow.
Seed -= Math.Floor(Seed / (Count + 1))