• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro regels verwijderen in bestand van >100.000 regels

Status
Niet open voor verdere reacties.

Welies

Gebruiker
Lid geworden
9 dec 2010
Berichten
128
Beste,

Ik ben op zoek naar een "simpele" macro welke in een bestand van >100.000 regels (en wordt maandelijks aangevuld en dus groter) een volledige regel verwijderd als de waarde in kolom S is "Dubbel".
Gezien de grootte van het bestand is het wenselijk dat deze macro enigzins snel de regel verwijderd.

Alvast dank voor jullie hulp.

Gr. Vincent
 
Doorzoek dit forum eens met de opdracht 'rijen verwijderen'.
Dit onderwerp is al zó vaak aan de orde geweest.
 
Het vinden van een macro is het probleem niet Zapatr, echter werken die erg traag (of niet) bij een bestand met >100000 regels.
 
Waarom gebruik je geen autofilter ?
Dat verwijdert een stuk sneller.
 
Laatst bewerkt:
Code:
Sub Verwijderen()
  Dim c1 As Range, c2 As Range, c3 As Range, t As Double
  t = Timer
  With Worksheets("data").Range("S1").CurrentRegion        'dit bereik rond S1
    .AutoFilter Columns("S").Column - .Column + 1, "dubbel"  'filteren op de S-kolom op de waarde "dubbel"
    With .Offset(1).Columns(1)                             'vanaf de rij eronder kijken naar de 1e kolom
      Set c1 = .Cells(1)                                   '1e cel
      Set c3 = c1.Offset(.Rows.Count)                      'eerstvolgende cel na je autofilterrange
      On Error Resume Next
      Do                                                   'in een loopje
        Set c2 = c1.Offset(WorksheetFunction.Min(c3.Row - c1.Row, 16380))  'blokje van 16.380 rijen (er zit een bug op 8192)
        c1.Resize(c2.Row - c1.Row).SpecialCells(xlVisible).EntireRow.Delete 'zichtbare cellen verwijderen
        Set c1 = c2
      Loop While c1.Row < c3.Row
    End With
    .AutoFilter
  End With
  MsgBox "klaar in " & Format(Timer - t, "0.00\s")
End Sub
 
Allen dank voor jullie hulp! Ik heb het uiteindelijk met een kleine omweg weten op te lossen met een autofilter en draaitabel. Thnks!
 
Tja, waarom vraag je dan om een macro?
En welke bestanden die ofwel te traag waren ofwel het niet deden, had je gevonden op het forum?
 
Die macro (in het voorlaatste bericht van het topic waarnaar je verwijst) doet het prima, de vragensteller bevestigt dat ook. Het enige dat jij daarin had moeten wijzigen was de kolomletter (H moet S worden), en het te zoeken woord waarmee de rijen verwijderd moeten worden('totaal' moet 'Dubbel' worden).
 
Ook dat klopt Zapatr, maar zoals ik aangeef in mijn vorige berichten werkt deze macro niet ivm het aantal rijen (althans, die conclusie trek ik zelf, aangezien er na een 1 uur nog niets was verwijderd).
Ik deze op opgelost.
 
Bij het verwijderen van regels wijzig je steeds iets aan een werkblad. Dat werkt onnodig traag.
Hoe meer je in het geheugen werkt hoe sneller.
In plaats van het verwijderen van regels kun je ook een nieuwe 'array' maken zonder de rijen die een bepaald gegeven bevatten; bijv.

Code:
Sub M_snb()
  sn=sheet1.cells(1).currentregion

  with createobject("scripting.dictionary")
    for j=2 to ubound(sn)
      if sn(j,19)<>"dubbel" then .item(.count)=application.index(sn,j,0)
    next
    redim sp(.count-1,ubound(sn,2)-1)
    
    for j=0 to ubound(sp)
     sr=.item(j+1) 
     for jj=0 to ubound(sp,2)
        sp(j,jj)=sr(jj)
     next
    next
  end with

  sheet2.cells(1).resize(ubound(sp)+1,ubound(sp,2)+1)=sp
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan