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

Delete alle regels met 0?

Status
Niet open voor verdere reacties.

Demeter

Verenigingslid
Lid geworden
24 mei 2006
Berichten
1.659
Bij gebruik van de volgende code:
Code:
Sub verwijderen_regels_zonder_uren()
Dim c As Range

For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp))
    If c = 0 Then c.EntireRow.Delete
Next

End Sub

Zouden alle regels in mijn bereik welke met een 0 zijn gevuld in kolom A worden verwijdert.
Alleen dit is niet het geval.
Als er 2 of meerdere regels met een 0 onder elkaar staan dan blijft er altijd een regel met een 0 over.

Wat gaat er fout?

Groet,
Ferenc
 

Bijlagen

  • test0.zip
    6 KB · Weergaven: 27
Bij gebruik van de volgende code:
Code:
Sub verwijderen_regels_zonder_uren()
Dim c As Range

For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp))
    If c = 0 Then c.EntireRow.Delete
Next

End Sub

Zouden alle regels in mijn bereik welke met een 0 zijn gevuld in kolom A worden verwijdert.
Alleen dit is niet het geval.
Als er 2 of meerdere regels met een 0 onder elkaar staan dan blijft er altijd een regel met een 0 over.

Wat gaat er fout?

Groet,
Ferenc
Hallo Ferenc,

For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp+1))

Gr, Justes
 
Ferenc

Dit soort probleem pak je aan van achter naar voor:

Code:
Dim l as Long
For l = Range("A" & Rows.Count).End(xlUp).Row to 1 Step -1
     If Range("A" & l) = 0 Then Rows(l).Delete xlShiftUp
Next

Wigi
 
Yep,

Hij blijft maar lopen.
Heb het nu opgelost met een filter, denk dat ik wat efficienter is.
Code:
Sub verwijderen_regels_zonder_uren()

Range("A1").AutoFilter Field:=1, Criteria1:="0"

Range("A2", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1").AutoFilter

End Sub
 
En eigenlijk is een Autofilter nog veel beter: filter op 0, en dan delete je de zichtbare rijen.

Dit is veel sneller dan een loop aangezien de Autofilter in Excel ingebouwd is. Een gewone loop door cellen in een bereik is zeker trager. Bij weinig rijen ga je wel slechts een klein verschil hebben.

Wigi
 
Yep,

Hij blijft maar lopen.
Heb het nu opgelost met een filter, denk dat ik wat efficienter is.
Code:
Sub verwijderen_regels_zonder_uren()

Range("A1").AutoFilter Field:=1, Criteria1:="0"

Range("A2", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1").AutoFilter

End Sub

We hebben dezelfde oplossing op hetzelfde moment gepost :D Dit is idd het beste dat je kan doen.
 
Heren,

Bedankt voor de snelle reacties. (3 posts in dezelfde minuut).
Autofilter it is.:D

Groet,
Ferenc
 
Hier is wat code om bij te houden als je het mij vraagt:

Code:
Sub DeleteFilter()
'by Tom Ogilvy, http://www.contextures.com/xlautofilter03.html

Dim rng As Range
Application.ScreenUpdating = False
Selection.AutoFilter Field:=1, Criteria1:="0"
With ActiveSheet.AutoFilter.Range
    On Error Resume Next
        Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If rng Is Nothing Then
        MsgBox "Er zijn geen gefilterde waarden."
    Else
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete xlShiftUp
    End If
    Selection.AutoFilter
End With
Application.ScreenUpdating = True
End Sub

De code van waar ik het heb aangepast staat in opmerking.

Wigi
 
Toevallig heb ik het wel getest en werkt prefect.

Gr Justes

Je zit vast in een oneindige lus. Al was ik ook verkeerd aangezien ik dacht dat er een syntaxfout ging komen.

Jouw testbestand zou ik evt. wel eens willen bekijken en bestuderen.

Wigi
 
Sub verwijderen_regels_zonder_uren()

Range("A1").AutoFilter Field:=1, Criteria1:="0"

Range("A2", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1").AutoFilter

End Sub


Met bovenstaande code verwijdert het ook de filter row zelf.
Ik weet niet waarom.
 
Gelieve volgende maal zelf een vraag te starten ipv een topic van 3 jaar oud op te halen want deze staat reeds als opgelost wat het aantal reacties danig vermindert, alsmede codetags te gebruiken voor de leesbaarheid
Code:
Sub verwijderen_regels_zonder_uren()

Range("A1").AutoFilter Field:=1, Criteria1:="0"

Range("A2", Range("A" & Rows.Count [COLOR="Red"]- 1[/COLOR]).End(xlUp)).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp

Range("A1").AutoFilter

End Sub
 
Laatst bewerkt:
Frankli, dan zal wellicht de A2 niet juist zijn.
 
Misschien kunnen jullie ook een keer proberen de macro uit te voeren, als ik een keer het heb uitgevoerd, ga ik nog een keer het uitvoeren(zonder de bestand te sluiten), dan wordt de filter row zelf ook verwijderd. zie bijlage.
 

Bijlagen

  • Bestand1.xls
    28 KB · Weergaven: 28
Laatst bewerkt:
Beste Frankli,

Allereerst wil ik even laten weten dat ik het geheel met warmbakkertje eens ben :).
Voor een vervolg op een al bestaande vraag graag een eigen post creeren.

TEvens wil ik je erop wijzen dat soms in een post meerder antwoorden juist zijn of dat er later nog iemand een betere versie van de code / aanpak heeft gepost.
Zo ook in deze post, zie het antwoord van Wigi met zijn aangepaste code vanaf contextures website.
Heb nog wel het bereik voor je autofilter gewijzigt.

Code:
Sub test()
'by Tom Ogilvy, http://www.contextures.com/xlautofilter03.html

Dim rng As Range
Application.ScreenUpdating = False

Range("A1").AutoFilter Field:=1, Criteria1:="0"

With ActiveSheet.AutoFilter.Range
    On Error Resume Next
        Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    
    If rng Is Nothing Then
        MsgBox "Er zijn geen gefilterde waarden."
    Else
        .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete xlShiftUp
    End If
    Selection.AutoFilter
End With

Application.ScreenUpdating = True

End Sub


ps.
De contextures website is een van de websites welke ik in het begin redelijk vaak heb afgestruint na een goed voorbeeld / start van een code.

ps 2
Ook wel wee leuk om een van je oude vragen terug te zien. lol

Succes met je Excel avontuur.

Groet,
Ferenc
 
Laatst bewerkt:
Dank je wel voor de hulp en de advies. ;)

En ik denk de probleem die ik heb iets te maken heeft met :
Application.ScreenUpdating = True
 
Application.Screenupdating heeft enkel tot doel om schermwisselingen uit te schakelen(Flikkeren van je scherm). De fout zit hem hoogstwaarschijnlijk in het feit dat je in jouw code geen controle hebt of de gefilterde range leeg is of niet en dat de code dan moet verdergaan of stoppen
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan