Well you setup the Rand variable, but then you overwrite it from the names array. Why? That is your problem...
vb
For i = 0 To Names.Length - 1
' Problem here, you read a name from the list in order and give it
' to Rand, but Rand was your random number
' (which means it should be an integer first of all)
Rand = Names(i)
So if you setup Rand as an integer, assign a random number based on the size of your names list... aka
Rand = (Rnd() * (Names.Length - 1)). So if you can pick random names out of the array and place them back and forth between the two lists.
The new trick will be to determine if a name has already been selected from the list and to stop as soon as the list has been exhausted of names.
Just to give you an idea of how you can randomly pick names from an array you can take a look at this example I wrote up for you...
vb
' Array of Names
Dim Names(4) As String
Names(0) = "Tom"
Names(1) = "Martin"
Names(2) = "Mary"
Names(3) = "James"
Names(4) = "John"
' Random number which will be between 0 and 4 subscripts of the array
Dim Rand As Integer
Rand = (Rnd() * (Names.Length - 1))
' Show the name of the random name chosen
MessageBox.Show(Names(Rand))
Here above you will have a messagebox that will show a name from the array at random. You can simply go back and forth between your two lists instead until all names from the array have been added.
How you mark off if a name has been selected is up to you. Some choices are making it a two dimensional array where the second dimension is a flag saying it has been chosen, another way is to add the name to a list of choices and once the list has as many names as the array's size, you know you have them all. Plus there are a few other ways. It is up to you and your design.
But this is a way to get your randomness and you can easily split using it. Hope it helps you out.
"At DIC we be name splitting code ninjas... we also split wood, bananas, and split from situations when two chicas get in a fight over who's man is a better father to little Enrique."