Well here is the first part, if only a smaller number of rows. I am afraid that I missed that last part until too late (delete all the rows that contain... vs. keep the original data)
<font face=Courier New><SPAN style="color:#00007F">Option</SPAN> <SPAN style="color:#00007F">Explicit</SPAN><br> <br><SPAN style="color:#00007F">Sub</SPAN> example()<br><SPAN style="color:#00007F">Dim</SPAN> rngData <SPAN style="color:#00007F">As</SPAN> Range<br><SPAN style="color:#00007F">Dim</SPAN> n <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN><br> <br> <SPAN style="color:#00007F">With</SPAN> Sheet1 <SPAN style="color:#007F00">'<---Using CodeName</SPAN><br> <br> <SPAN style="color:#007F00">'// Find last cell with data //</SPAN><br> <SPAN style="color:#00007F">Set</SPAN> rngData = RangeFound(.Range("C:C"))<br> <br> <SPAN style="color:#007F00">'// If no cell with data, OR, if cell with data as at less than row 3 (no possible //</SPAN><br> <SPAN style="color:#007F00">'// duplicates) //</SPAN><br> <SPAN style="color:#00007F">If</SPAN> rngData <SPAN style="color:#00007F">Is</SPAN> <SPAN style="color:#00007F">Nothing</SPAN> <SPAN style="color:#00007F">Then</SPAN> <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br> <SPAN style="color:#00007F">If</SPAN> rngData.Row < 3 <SPAN style="color:#00007F">Then</SPAN> <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br> <SPAN style="color:#007F00">'// Set a reference to cells in Col C //</SPAN><br> <SPAN style="color:#00007F">Set</SPAN> rngData = .Range(.Range("C2"), rngData)<br> <br> <SPAN style="color:#007F00">'// Plunk in a formula to detect Dups //</SPAN><br> rngData.Offset(, 9).Formula = _<br> "=COUNTIF(" & rngData.Address(-1, -1) & "," & rngData.Cells(1).Address(0, 0) & ")"<br> <SPAN style="color:#007F00">'// Overwrite return of formula w/values //</SPAN><br> rngData.Offset(, 9).Value = rngData.Offset(, 9).Value<br> <br> <SPAN style="color:#007F00">'// Run up from the bottom, deleting non-uniques //</SPAN><br> <SPAN style="color:#00007F">For</SPAN> n = rngData.Rows.Count <SPAN style="color:#00007F">To</SPAN> 1 <SPAN style="color:#00007F">Step</SPAN> -1<br> <SPAN style="color:#00007F">If</SPAN> rngData.Offset(, 9).Rows
.Value > 1 <SPAN style="color:#00007F">Then</SPAN><br> rngData.Rows
.EntireRow.Delete<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br> <SPAN style="color:#00007F">Next</SPAN><br> <br> <SPAN style="color:#007F00">'// Rid formula returns //</SPAN><br> rngData.Offset(, 9).Clear<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">With</SPAN><br> <br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN><br> <br><SPAN style="color:#00007F">Function</SPAN> RangeFound(SearchRange <SPAN style="color:#00007F">As</SPAN> Range, _<br> <SPAN style="color:#00007F">Optional</SPAN> <SPAN style="color:#00007F">ByVal</SPAN> FindWhat <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">String</SPAN> = "*", _<br> <SPAN style="color:#00007F">Optional</SPAN> StartingAfter <SPAN style="color:#00007F">As</SPAN> Range, _<br> <SPAN style="color:#00007F">Optional</SPAN> LookAtTextOrFormula <SPAN style="color:#00007F">As</SPAN> XlFindLookIn = xlValues, _<br> <SPAN style="color:#00007F">Optional</SPAN> LookAtWholeOrPart <SPAN style="color:#00007F">As</SPAN> XlLookAt = xlPart, _<br> <SPAN style="color:#00007F">Optional</SPAN> SearchRowCol <SPAN style="color:#00007F">As</SPAN> XlSearchOrder = xlByRows, _<br> <SPAN style="color:#00007F">Optional</SPAN> SearchUpDn <SPAN style="color:#00007F">As</SPAN> XlSearchDirection = xlPrevious, _<br> <SPAN style="color:#00007F">Optional</SPAN> bMatchCase <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Boolean</SPAN> = <SPAN style="color:#00007F">False</SPAN>) <SPAN style="color:#00007F">As</SPAN> Range<br> <br> <SPAN style="color:#00007F">If</SPAN> StartingAfter <SPAN style="color:#00007F">Is</SPAN> <SPAN style="color:#00007F">Nothing</SPAN> <SPAN style="color:#00007F">Then</SPAN><br> <SPAN style="color:#00007F">Set</SPAN> StartingAfter = SearchRange(1)<br> <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN><br> <br> <SPAN style="color:#00007F">Set</SPAN> RangeFound = SearchRange.Find(What:=FindWhat, _<br> After:=StartingAfter, _<br> LookIn:=LookAtTextOrFormula, _<br> LookAt:=LookAtWholeOrPart, _<br> SearchOrder:=SearchRowCol, _<br> SearchDirection:=SearchUpDn, _<br> MatchCase:=bMatchCase)<br><SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Function</SPAN></FONT>
See what you can do as to first creating a copy of the original sheet, then delete rows of duplicate values.
Mark