• 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.

Lege velden verwijderen macro

Status
Niet open voor verdere reacties.
een klein bestandje met de code uit bovenstaande reactie.
macro "herbeginnen" veegt alle rommel zodat je weer met een blanco lei start.
macro "testje" maakt 260.000 rijen met gegevens aan met een aantal lege rijen en gaat dan via de HSV-methode en de ExcelHero-methode die te lijf.
Blijkt, met mijn computer, dat HSV 40 maal trager is dan ExcelHero.
Dat was wel een beetje moeilijk te bepalen, anders had ik een microtimer van stal moeten halen :p
 

Bijlagen

Welke van de twee ben ik Bart.

Ps. Overigens wel vreemd dat "mijn" regelcode (specialcells(4) alles verwijderd.
 

Bijlagen

  • Naamloos.jpg
    Naamloos.jpg
    18,4 KB · Weergaven: 55
Laatst bewerkt:
Mooi om deze discussie te zien wat voor iets in mijn ogen vrij simpel zou kunnen zijn. Echter zijn er zoveel wegen die kunnen worden gekozen.

Stel dat een worksheet vol met data staat waarbij de kolom koppen een bepaalde waarde moeten bevatten. Zeg in mijn voorbeeld bijv "x" of "j". Als die gevonden is zal de gehele rij incl overige kolomkoppen moeten worden behouden. Overige rijen die in mijn ogen dus "leeg" zijn of niet relevante data mogen worden verwijderd.

Hoop dat het iets duidelijker is op deze manier.
 
@Dappre,
een voorbeeldje zou duidelijker zijn, want ik veronderstel dat je wil zeggen dat, als in de A-kolom een x of een y staat, dat dan die rijen behouden mogen blijven.
Je term "kolomkoppen" brengt me een beetje in verwarring.
Overigens, die uitgebreide filter die in die "ExcelHero" gebruikt wordt, die is daar uiterst geschikt voor.
Enige beperking is dat, moesten er formules in je blad staan, die bij deze verdwenen zijn en vervangen door de waarde.

@HSV,
Ik denk me te herinneren dat er ergens een bug in excel zat, zodat eens voorbij de 8.000 en een beetje areas er iets misging, maar dat is in een heel ver verleden, ik ken de details niet meer.
Wat er gebeurt is, dat er 260.000 cellen in "gegevens" gevuld worden en dat er daartussen ongeveer 10.000 lege cellen zitten.
Ik doe dat in een loopje van 4*65.000. Er gaat ergens iets fout als ik die 65.000 bv verhoog naar 75.000, dan staan er tig NB() in die A-kolom. Waarom weet ik niet en hier eventjes off-topic.
In de rest van dat macrootje "testing" zal dan eerst de lege rijen verwijderd worden in het werkblad "DeleteRijen" volgens jouw methode, dus de 1e tijdsmeting is de HSV-methode en vervolgens wordt in een nieuw blad de ExcelHero-methode gebruikt en dat is de 2e tijdsmeting.
Beide methodes leveren mij exact even veel rijen op, ergens net onder de 250.000. (nu bv. 249.756, maar dat varieert per keer dat je die macro laat draaien)
Waarom het bij jouw fout gaat ? Lukt het niet, probeer anders eens ipv 4*65.000 10*26.000 als je die NB() krijgt
Bij mij is de 1e tijdsmeting iets van 37 sec, de 2e 1 sec.
 
Thnx voor jullie reaties,

Ik heb het in een voorbeeld geschetst.

Bekijk bijlage Voorbeeld_lege_rijen.xlsx

En inderdaad wat Cow zegt mag je veronderstellen dat wat er in het voorbeeld staat dat rij A2, A3 in zijn geheel moetn worden behouden en de rijen A4,A5 dus moeten worden verwijderd.
A6 daarentegen mag weer worden behouden, net zoals A10 en A14.

Alle overige rijen 'leeg' mogen worden verwijderd.

Hopelijk is dit weer een stuk duidelijker.
 
Dag Dappre,

de truc zit in de groene cellen P1:Q3.
Die worden gebruikt in het uitgebreid filter als criteriumbereik. Ze willen zeggen dat de kolom "11" "j" moet zijn of de kolom "12" "x"
De corresponderende rijen worden naar AA1 gekopieerd
 

Bijlagen

Code:
Sub M_snb()
   t0 = Timer
   
   Blad8.[C1:C2] = [{"Letter" ;">"""}]
   Blad8.Columns(1).AdvancedFilter 2, Blad8.[C1:C2], Sheet1.Cells(1)
   
   MsgBox Timer - t0     '    0,65
End Sub

Code:
Sub M_snb_001()
'   Blad18.Columns(1).Copy Blad8.Columns(1)
   t0 = Timer
   
   Blad18.Columns(1).SpecialCells(4).EntireRow.Delete

   MsgBox Timer - t0            '   69,14
End Sub
 
@ SNB, mooi geillustreerd, door mijn winterslaap was ik die "timer" vergeten als chronometer.
Die uitgebreide filter voor Dappre heeft nu 0.19 sec nodig.
 
Bij mij is autofilter net iets sneller dan advancedfilter.

Code:
Sub M_snb_002()
'   Blad8.Columns(1).Copy Blad18.Columns(1)

   t1 = Timer
   
   With Blad18.UsedRange.Columns(1)
     .AutoFilter 1, "<>"
     .Copy Sheet1.Cells(1)
     .AutoFilter
    End With
    
   MsgBox Timer - t1
End Sub
 
@snb
het bestandje in post 25 kijkt naar een "x" in de ene kolom of een "j" in een andere kolom.
Je zou anders nog een hulpkolom kunnen aanmaken zodat je die zaken in die hulpkolom combineert ofwel direkt het uitgebreid filteren gebruiken.
Je insteek werkte wel naar behoren in de posten daarvoor.
Even kijken wat de topicstarter er van zegt, want die heeft al een nieuwe vraag gestart ...
 
Ik ga hem zsm testen heren, bedankt voor jullie hulp alvast. En ik heb inderdaad weer een nieuwe vraag gestart. Jullie kennis is goud waard :)
 
Bedankt voor de vele reacties en diverse code. Vandaag het 1 en ander getest en toch kom ik tot de conclusie dat er rijen worden verwijderd die wel een waarde hebben (x,j). Ik heb voor het gemak de eerste code van HSV toegepast.

Het kan zijn dat kolommen verwijderd zijn. Het is immers een samengevoegd bestand waar aan geknutseld wordt en weer retour komt. Dit maakt het lastig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan