Create a Macro in VBA to search for the unique entries in a list and remove duplicates.
Having a long list of items with duplicate entries is very common in Excel. Sometimes you do not want these duplicates and need to make a new list without them.
In order to create a new list that contains only unique items you can of course do it manual with the filter function in Excel but if you want to automatize it, then you need to create a macro.
Let's take the list here under which is a list of fruits. We want to create a new list without the duplicates and put it next to it.
For this we are going to use the loop statement FOR...TO...NEXT and the conditional statement IF....THEN....ELSE.
You want by pressing the button to start a VBA macro that create a new list on the right of the old one that contains only unique names
Let's think before we write code. This is the usual rule. Think before you write you code. Only genius people can write VBA code or any code without thinking. Usually what happens is you start typing code and it is fine for the beginning but once the first lines written you have to go back and make changes, and then add lines and then make try to remember what you wanted to do and then you code becomes so unreadable that you just start all over.
So here is the process we are going to use to make our VBA sort or remove duplicate algorithm.
2. then I take the second item and browse the final table to see if it is there.
3. if not I put it in the final table in position ItemNb + 1
4. then I take the third item (i +1) of the first table '
5. then I browse the final table again and look search ' etc...
Here is the code associated with this algorithm.
Dim finalTable(50) As String
beginning = 6 ' first row of the table
itemNb = 0 ' the number of unique items
alreadyHere = False ' flag to say I saw it already
totalNumber = 50 'define some max items in the list
Column = 2 ' the column of the list
finalColumn = 4 ' in which column will the unique sorted out item go.
For i = 0 + beginning To totalNumber + beginning ' scan through the first table
alreadyHere = False
firstcolumnValue = Cells(i, Column).Value
For j = 0 To itemNb 'we scan the final table
If firstcolumnValue = finalTable(j) Then alreadyHere = True
'if the firstcolumn value is already here we set alreadyhere to true
Next j
If alreadyHere = False Then 'if already here is still false then it is a new value
finalTable(itemNb) = Cells(i, Column).Value ' add the unique item to the table
Cells(itemNb + beginning, finalColumn).Value = finalTable(itemNb) ' display it in the excel sheet
itemNb = itemNb + 1 'we increment to be ready for the next one.
End If
Next i
End Sub
Here is the result.