Change it to a static variable outside the loop.
Static rand As New Random
The Random class uses a seed (which is just an integer) to generate its Random numbers. Two Random objects with the same seed will generate the same numbers.
Now, if you don't provide a seed in the constructor, the default is that the seed is taken from Environment.TickCount.
Therefore, if you create multiple Random objects in quick succession, it's likely that many/all of the Random objects will get the same seed value from Environment.TickCount, and thus will generate the same sequence of numbers.
For this reason, it is generally advised that you have only one instance of Random in your application (or possibly one per thread, since the Random class isn't thread safe). So, you need to move the creation of the Random object outside of the loop, and organise your code so you reuse the same Random object to generate the numbers.