I think LINQ, as pointed by @Guffa, is the most convenient way to accomplish this task. But you can also accomplish this with basic For loop operations.
Have a temporary collection to store distinct values (distinct in below example), then in every For loop iteration, if you encounter number that already exist in that collection, you know exactly that the number is a duplicate :
'variable to store distinct numbers (either duplicated or not)
Dim distinct As New List(Of Integer)
'variable to store duplicated numbers
Dim duplicates As New List(Of Integer)
For i As Integer = 0 To numbers.Length - 1
'if distinct doesn't contain number(i), means this number isn't duplicated SO FAR
If Not distinct.Contains(numbers(i)) Then
distinct.Add(numbers(i))
'else, means distinct already contains the number, means this numbers(i) is a DUPLICATE
'if the number hasn't been added to duplicates, add it
ElseIf Not duplicates.Contains(numbers(i)) Then
duplicates.Add(numbers(i))
End If
Next
'following lines are for debugging purpose only
'print all numbers
Console.WriteLine(String.Join(",", numbers.Select(Function(x) x.ToString()).ToArray()))
'print all duplicates
Console.WriteLine(String.Join(",", duplicates.Select(Function(x) x.ToString()).ToArray()))
'print distinct numbers
Console.WriteLine(String.Join(",", distinct.Select(Function(x) x.ToString()).ToArray()))
Dim uniques = numbers.Distinct().ToArray().Distinctmethod doesn't remove values that have duplicates, it only removes the duplicates and leaves one of each value.