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

VBA rijen wissen

Status
Niet open voor verdere reacties.

oeldere

Terugkerende gebruiker
Lid geworden
26 dec 2008
Berichten
2.741
ik wil in een bestandje graag de rijen wissen die niet aan een voorwaarde voldoen.

in dit geval wissen van rijen die in kolom G niet (T, H, of L) zijn.

hoe ziet een dergelijke code eruit.

Code:
With Columns("g").SpecialCells(xlCellTypeBlanks).Cells          'rijen wissen
    .EntireRow.Delete Shift:=xlUp

bovenstaande code werkt niet omdat de cellen niet leeg zijn.
 

Bijlagen

Sub Opmaak_bewerken_0403_rijenwissen()

met deze code zou dan de T verwijdert moeten worden.

maar deze code werkt niet.

Wie kan me nog een zet in de goede richting geven?

Code:
  Dim c        As Range, bereik As Range
  With Sheets("blad1")
   
     Set c = Sheets("blad1").Range("G" & Rows.Count).End(xlUp).Offset(1)
    If c.Row < 3 Then Set c = c.Offset(3 - c.Row) 'je mag maar vanaf rij 3 in uitvoer beginnen
    
    If c = ("t") Then c.EntireRow.Delete shift:=xlUp
    
  End With
  
End Sub
 
Om de rijen met "t" te verwijderen:

Code:
Sub RijenVerwijderen()
Dim i As Range
For Each i In ActiveSheet.Range("G4", Range("G" & Rows.Count).End(xlUp).Offset(1))

If i = "t" Then
    i.EntireRow.Delete
End If
Next
End Sub

Voor de lege rijen had ik:
Code:
Sub RijenVerwijderen()
Dim i As Range
For Each i In ActiveSheet.Range("G4", Range("G" & Rows.Count).End(xlUp).Offset(1))

If (Len(i) - Len(Trim(i))) > 0 Then
    i.EntireRow.Delete
End If
Next
End Sub

Het rare is echter dat ik de macro 3 keer moet laten draaien om alle rijen te verwijderen. Waar dat aan ligt ben ik nog niet achter.
 
Het rare is echter dat ik de macro 3 keer moet laten draaien om alle rijen te verwijderen. Waar dat aan ligt ben ik nog niet achter.

Zo heel raar is dat niet,
Stel je hebt in regel 4 en 5 een T staan dan wordt regel 4 verwijdert dan wordt regel 5 regel 4 en die heeft de macro al gecontroleerd.
Als je er dus een aantal op rij hebt staan kan het zijn dat je de macro meerdere keren uit moet voeren.

zal best wel een betere oplossing zijn maar volgens mij moet dit werken.

Code:
Sub RijenVerwijderen()

For y = ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row To 4 Step -1

If Cells(y, 7).Value = "t" Then
   Cells(y, 7).EntireRow.Delete
End If

If Cells(y, 7).Value = "h" Then
   Cells(y, 7).EntireRow.Delete
End If

If Cells(y, 7).Value = "l" Then
   Cells(y, 7).EntireRow.Delete
End If

Next y

End Sub



Niels
 
Laatst bewerkt:
Ik weet niet of ik de vraag goed lees.
Je hebt het er over om alles die niet T,H,L bevatten in kolom G?
daarna geef je aan dat je de rijen met T wil wissen.

Mijn vorige post wist alles met een T,H,L in kolom G

de volgende code laat de rijen met een T,H,L in kolom G staan en verwijdert de rest.

Code:
Sub RijenVerwijderen()

For y = ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row To 4 Step -1

If Cells(y, 7).Value <> "t" Then
If Cells(y, 7).Value <> "h" Then
If Cells(y, 7).Value <> "l" Then
   Cells(y, 7).EntireRow.Delete
End If
End If
End If

Next y

End Sub
 
Laatst bewerkt:
Of:
Code:
Sub tst()
    Dim i, cl
      For i = Cells(Rows.Count, 7).End(xlUp).Row To 4 Step -1
        For Each cl In Cells(i, 7)
   If InStr("TtHhLl", LCase(cl)) > 0 Then
  Else
      cl.EntireRow.Delete
     End If
    Next cl
  Next
End Sub

Ongeacht klein- of hoofdletter gebruik.
 
@hier en nu en Niels 28,

bedankt voor de reactie.

Niels met je laatste post is mijn probleem opgelost.

dat was inderdaad wat ik in 1e instantie vroeg.

daarna dacht ik dat ik het dan met <> T wel op kon lossen.

Maar door het goede lezen van Niels28 hoeft dat ook niet meer.

Top, deze is opgelost. :thumb::thumb:
 
@HSV,

en de code van jouw werkt ook als een (snel)trein.

bedankt voor de reacties.
 
@hsv,

en hoe ziet de code er dan uit als een van de criteria lb is.

dient dit dan afgeschermd te worden met een komma?

het antwoord is nee, want deze code doet het niet.

Code:
If InStr("TtHhLl,lb", LCase(cl)) > 0 Then
 
@hsv,

en hoe ziet de code er dan uit als een van de criteria lb is.

Code:
If InStr("TtHhLl[COLOR="red"]b[/COLOR]", LCase(cl)) > 0 Then

Zie de rode "b".
 
dat ga ik morgen nog even testen, maar ik ben ervan overtuigd dat de oplossing werkt.
 
Het scheelt 'm toch weer enkele regels :D
Code:
Sub tst2()
    sq = "H,L,T,LB"
    For i = Cells(Rows.Count, 7).End(xlUp).Row To 4 Step -1
        If InStr(1, sq, UCase(Cells(i, 7).Value)) = 0 Then Cells(i, 7).EntireRow.Delete shift:=xlUp
    Next
End Sub
 
Laatst bewerkt:
@hsv, getest en werkt (ook) als een trein.

@warm bakkertje, getest is korter en werkt ook als een trein

@exelamateur, met jouw link gaat (weer) een nieuwe wereld open.

Persoonlijk vindt ik zelf (als beginner) de code van Niels28 het beste te begrijpen en aan te passen.

allen bedankt voor de reacties.:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan