Home |
Search |
Today's Posts |
#19
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
GS expressed precisely :
Your code took 46 secs to run your sample data on my machine. That's amazing! I'm curious, now, how it performs if we did similar using a Collection so we can have duplicates in ColA! I modified my sub to use your idea to use Dictionary, but NOT put colA in a dictionary and it shaved 11 secs off the ET... Sub StripDupes() Dim i&, j&, lRows1&, lRows2& lMatchesFound& 'as long Dim vRngA, vRngB, vRngOut() 'as variant Dim dRngB As Dictionary lRows1 = Cells(Rows.Count, "A").End(xlUp).Row lRows2 = Cells(Rows.Count, "B").End(xlUp).Row vRngA = Range("A1:A" & lRows1): vRngB = Range("B1:B" & lRows2) Set dRngB = New Dictionary Debug.Print Now() For j = LBound(vRngB) To UBound(vRngB) With dRngB If Not .Exists(Key:=vRngB(j, 1)) Then _ .Add Key:=vRngB(j, 1), Item:=vRngB(j, 1) End With Next 'j sTemp = Mid$(sTemp, 2) ' Debug.Print Now() For i = LBound(vRngA) To UBound(vRngA) If dRngB.Exists(Key:=vRngA(i, 1)) Then _ vRngA(i, 1) = "": lMatchesFound = lMatchesFound + 1 Next 'i ' Debug.Print Now() j = 0: ReDim vRngOut(UBound(vRngA) - lMatchesFound, 1 To 1) For i = LBound(vRngA) To UBound(vRngA) If Not vRngA(i, 1) = "" Then vRngOut(j, 1) = vRngA(i, 1): j = j + 1 End If Next 'i ' Debug.Print Now() Range("A1:A" & lRows1).ClearContents Range("A1").Resize(UBound(vRngOut), 1) = vRngOut Debug.Print Now() End Sub -- Garry Free usenet access at http://www.eternal-september.org ClassicVB Users Regroup! comp.lang.basic.visual.misc |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Delete all cells in range matching certain values | Excel Programming | |||
Help with Matching Text Fields - Then Moving the Matching Cells Side by Side | Excel Discussion (Misc queries) | |||
DELETE ROW 3 MATCHING CRITERIA | Excel Programming | |||
delete all matching rows | Excel Discussion (Misc queries) | |||
Perform Lookup and delete non matching rows? | Excel Programming |