Kære Eksperter. Håber jeg smider spørgsmålet i den rette kategori. Jeg mener at det er mere kode orienteret end Excel orienteret.
Jeg har et excelark, hvor der er en masse duplicates. Jeg vil gerne fjerne alle dem som IKKE er duplicates. Til det har jeg fremstillet følgende:
Sub Remove_Singles() Dim x As Variant, y As Variant, z As Integer, o As Integer
z = 0 o = 0
For Each x In Selection o = o + 1 For Each y In Selection If x = y Then z = z + 1 Next y
If z < 2 Then Cells(o, 1).EntireRow.Delete
z = 0 Next x MsgBox "Done" End Sub
Det fungerer egentlig udmærket, den fjerner alle singles. Problemet er bare, at det er som om at den stopper midt i loopet. F.eks med følgende data: d d e f
Bliver resultatet: d d f
Hvorfor fjerner den kun e, og ikke også f? Det er som om den stopper efter at have fjernet e.
Formentlig fordi du opdaterer/sletter rækker under et loop. Når du sletter en række rykker de resterende rækker opad, men foreach-pointeren opdateres ikke, men går blot videre med næste række...
Hvis du bruger Long som i nedenstående omskrivning, skal du op på over 2.147.483.647 rækker for at få problemer med antallet, hvilket jo er 'lidt' mere end de 1.048.576 der er mulige i Excel 2010. (Rækkerne som skal undersøges skal som hidtil markeres før kørsel af makro.) Du er obs på at Fortryd ikke dur efter en makro i Excel?
Sub Remove_Singles_II() Dim x As Variant, y As Variant, z As Long, o As Long, cnt As Long z = 0 o = Selection.Count cnt = Selection.Count For x = cnt To 1 Step -1 For y = 1 To cnt If Selection(x) = Selection(y) Then z = z + 1 Next y
If z < 2 Then Cells(o, 1).EntireRow.Delete cnt = cnt - 1 End If o = o - 1 z = 0
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.