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

Verwijder alle rijen waarde 0

Status
Niet open voor verdere reacties.

Macro Man

Gebruiker
Lid geworden
17 dec 2007
Berichten
48
Hallo allemaal,

Ik heb een vraag over het verwijderen van een rij als en waarden nul is;.

Stel:
Waarde aanwezig
aap 7 1
hond 3 0
kat 2 1
kip 1 2
koe 6 0
krok 8 1
stier 9 3
vis 1 0
vogel 2 1

Met een knop worden alle rijen dieren:p met waarden voor "aanwezig "verwijdert.

Ik zelf loop te klooien met:
Code:
Private Sub CommandButton6_Click()

Range("c2").Select
    Do Until Selection.Value = ""
            If Selection = 0 Then
                    Selection.EntireRow.Select
                    Selection.Delete Shift:=xlUp
            End If
        Selection.Offset(1, 0).Select
    
    Loop

End Sub

Maar als ik op de knop druk word er een verwijdert en loopt daarna vast.
Ik hoop dat iemand weet wat ik fout deed.

Tom
 
Hoi Macroman,

Welkom op dit forum.
Klooi hier eens mee verder:

Code:
Columns("C:C").Select
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Range("A1").Select

Richard
 
Laatst bewerkt:
quote

Hoi Macroman,

Welkom op dit forum.
Klooi hier eens mee verder:

Code:
Columns("C:C").Select
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Range("A1").Select

Richard

Dat is snel:thumb:. In het voorbeeld werkt je code perfect, maar in een ander bestand waar ik het wil hebben, pakt hij niet alles. Sommige cel rijen zijn gekopieerd van andere pagina's en hebben bijvoorbeeld de waarde:
=ALS(BF!$C$12=1;0;6)

Ik denk dat hij ze niet pakt als "0"
Iniedergeval bedankt voor je eerste oplossing, hopelijk weet je ook hoe je deze moet verbeteren.

Macro man
 
MM

Als je met een lus werkt, moet je onderaan starten en zo naar boven toe werken.

Beter zou wel zijn een autofilter te gebruiken. Je filtert op 0, en de gefilterde rijen verwijder je. Heb je zelfs geen VBA voor nodig.

Wigi
 
MM

Als je met een lus werkt, moet je onderaan starten en zo naar boven toe werken.

Beter zou wel zijn een autofilter te gebruiken. Je filtert op 0, en de gefilterde rijen verwijder je. Heb je zelfs geen VBA voor nodig.

Wigi

Het is de bedoeling dat het via een knop gaat, alles automatisch, omdat de lijst vaak verandert. En andere mensen moeten het makkelijk kunnen gebruiken.

De code van Richard vind ik goed, het probleem is dat hij niet alle nullen pakt.
(Lees Quote op Richard)

Macro man
 
Macro Man,

heb je deze reactie van Wigi gelezen en geprobeerd?

Als je met een lus werkt, moet je onderaan starten en zo naar boven toe werken.

Je kan ook zijn tweede deel van die reactie gebruiken, je kan dat immers ook in VBA verwerken.

Beter zou wel zijn een autofilter te gebruiken. Je filtert op 0, en de gefilterde rijen verwijder je.
 
Ja, ik heb de oplossing van Wigi gebruikt door mddel van macro opnemen, auto filter herkend de waardes wel als 0. De knop werkt nu alleen langzaam, er gaan namelijk ook nogal wat handelingen aan vooraf.

Het is mijn formule mij niet gelukt mijn eigen formule zo omtebouwen dat hij onderaan begint. Ik weet nie hoe je de onderste cell van een kolom selecteerd.

Is het niet mogelijk in de formule van richard1970 de waarde wel te laten herkennen? Bij voorbeeld het toevoege van "value", het lukt mij niet om dit er goed bij te plakken.

MM
 
Post jouw code anders eens, misschien kunnen we die wat *tweaken*.
 
Oke, ik zal even een excel bestand maken die er op lijkt. Het orgineel is van een groot bedrijf waar ik stage loop, dat kan ik niet zomaar op het internet zetten. Het haalt boven dien zijn informatie uit een losse database waardoor jullie geen waardes kunnen zien.

MACRO MAN
 
Nou hier is ies vergelijkbaars, op Blad5 moet een lijst ontstaan met een opsomming van Blad2,3 &4. Hierin moeten allen met aantal "waarde 0" verdwijnen.

Macro Man:eek:
 

Bijlagen

MacroMan, ik heb jouw 'quest' misbruikt om bezig te zijn met Array's :o (dat probeer ik onder de knie te krijgen). Ik weet dus niet of dit de slimste methode is om je regels met nul te verwijderen, maar 't werkt prima..... (en was dus voor MIJ weer een prima les! :cool::rolleyes:)
Code:
Sub VerwijderRegelAlsNul()
Dim vRegelNr() As String
Dim i As Long
Dim y As Integer, x As Integer

    i = 1
    y = 0
    
    'een array mag maximaal 365 elementen bevatten...
    If Application.WorksheetFunction.CountIf(Range("A:A"), "=0") > 364 Then
        MsgBox "Teveel regels met nul...", vbOKOnly, "voorkom fout!"
        Exit Sub
    End If
    
    Do Until IsEmpty(Cells(i, 1)) = True
        If Cells(i, 1).Value = 0 Then
            ReDim Preserve vRegelNr(y)
            vRegelNr(y) = Cells(i, 1).Address
            y = y + 1
        End If
        i = i + 1
     Loop
    
    For x = UBound(vRegelNr) To 0 Step -1
        Range(vRegelNr(x)).EntireRow.Delete
    Next x

End Sub
De 1e lus loopt door kolom A en kijkt in iedere cel of de waarde nul is (ook van formules). Zo ja, dan wordt het adres van deze cel opgeslagen in de Array vRegelNr. Als de lus aan het einde is gekomen van de ingevulde cellen (er mogen dus géén 'gaten' in je lijst zitten) dan wordt de lus verlaten en komt de 2e lus. Hierin ga ik vanaf het laatst gevonden 'nul-adres' terug lopen door de lijst met behulp van de Array. Daarmee wordt iedere regel gedelete....

Groet, Leo
 
Laatst bewerkt:
Leo

Goed dat je je met nieuwe dingen bezig houdt ;) Altijd verrijkend.

Hier echter zie ik er weinig heil van. Als je toch een lus maakt om te deleten, dan hoeven die celadressen niet genoteerd te worden.

MM

Met de Autofilter kan bijna niet trager zijn dan het loopen door de cellen (tenzij het over weinig rijen gaat natuurlijk). Dus ik zou aanraden om verder te gaan met die autofilter als je het snel wilt klaren. Speelt snelheid geen rol, dan is een lus in de stijl van de gegeven stukken code meer dan goed genoeg. Werk wel van onder naar boven. Met

Code:
Range("A" & Rows.Count).End(xlUp).Row

krijg je het nummer van de rij met de laatst ingevulde cel in kolom A.

Wigi
 
Ginger, als we er allemaal veel van lere is het natuurlijk het beste.:) Maar je formule werkt niet lekker bij mij. Als ik je formule achter de knop sorteren zet in mijn voorbeeld en (A:A) verander (E:E), geeft hij de foutmelding:
"Fout 9 tijdens uitvoeren.
Het subscript valt buiten het bereik."

Daarna geeft hij deze regel aan in het geel:
Code:
For x = UBound(vRegelNr) To 0 Step -1

Wigi, ook jouw regel werkt niet erg goed.
Hij geeft:
"Complimeerfout
ongeldig gebruik van eigenschappen"

Daarna markeert hij:
Code:
Range("C" & Rows.Count).End(xlUp).[B][COLOR="Blue"]Row[/COLOR][/B]

Maar de lijst is erg lang dus ik zal dan autofilter moeten gebruik, wat goed werkt.

Bedankt voor jullie hulp:thumb:

Macro man
 
Wigi, ook jouw regel werkt niet erg goed.
Hij geeft:
"Complimeerfout
ongeldig gebruik van eigenschappen"

Daarna markeert hij:
Code:
Range("C" & Rows.Count).End(xlUp).Row

MM

Wat jij zegt klopt niet. Voer maar eens dit uit:

Code:
Sub laatsterij()
    MsgBox Range("C" & Rows.Count).End(xlUp).Row
End Sub

Het kan wel dat je die regel in een verkeerde context geplaatst hebt, maar dat kan ik van hier niet zien natuurlijk.

Wigi
 
Wigi,
Met jouw formule laat nu een tekst blok zien, maar ik wil het onderse geselecteerd.
Ik had al geprobeerd om en er select achter te zette maar dat werkt niet. Hoe programmeer je dat dan?

mmm
 
Wigi,
De formule die op die site staat werkt goed, ik begrijp wel hoe hij ongeveer werkt maar er zaten veel termen in die ik nog nooit had gezien. Ik weet nu wel genoeg om een werkende oplossing te maken.

Bedankt voor je hulp, alle andere die gereageerd hebben trouwens ook.

Ik heb nog een vraag over hoe ik misschien handigger alle tabellen van verschillende tabbladen kan samenvoegen in een grote tabel op het laatse tabblad. Nu doe ik het via een opneem macro alles onder elkaar plakken en dan sorteeren.
Maar misschien kan ik hier beter een nieuwe vraag over beginnen, ik kon tot nu toe niks over vinde in de database.

Tom
 
Ik heb nog een vraag over hoe ik misschien handigger alle tabellen van verschillende tabbladen kan samenvoegen in een grote tabel op het laatse tabblad. Nu doe ik het via een opneem macro alles onder elkaar plakken en dan sorteeren.
Maar misschien kan ik hier beter een nieuwe vraag over beginnen, ik kon tot nu toe niks over vinde in de database.

Tom

Inderdaad 1 vraag per topic lijkt me voor de overzichtelijkheid het meest eenvoudige.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan