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

meerdere regels verwijderen met VBA

Status
Niet open voor verdere reacties.

vrouw

Terugkerende gebruiker
Lid geworden
27 mrt 2010
Berichten
1.434
Hallo,

Ik gebruik onderstaande code om alle regels te verwijderen waarbij in kolom D een 7 voorkomt.
maar ik wil dit ook als er 19 en 72 in voorkomt. Ik heb geprobeerd met
If Cells(Row, 4).Value = 7,19,72 Then
maar dat werkt niet......

Code:
' Macro4 Macro

Public Sub pfDelRows()

totalrows = ActiveSheet.UsedRange.Rows.Count

For Row = 1 To totalrows
    If Cells(Row, 4).Value = 7 Then
    Rows(Row).Delete
    End If
Next Row

End Sub
 
Laatst bewerkt:
Hallo Vrouw,

Als je de IF-regel eens vervangt door
If (Cells(Row, 4).Value = 7 OR Cells(Row, 4).Value = 19 OR Cells(Row, 4).Value = 72) Then
dan zou het moeten lukken.
Maar toch niet: Zet maar eens twee te verwijderen regels onder elkaar en je zult zien dat de tweede regel niet verwijderd wordt.
Dit komt omdat de tweede regel door de verwijdering van de eerste regel de eerste regel wordt.
Je moet een dergelijke verwijdering dan ook niet van boven naar beneden, maar van beneden naar boven doen.
 
Hallo Vrouw,

Ik heb zoiets ooit eens opgelost door de volgende code te gebruiken.
(ik heb hem nu even iets aangepast en niet getest)


Code:
Sub Delete_Rows()
 Dim rng As Range, cell As Range, del As Range
 Set rng = Intersect(Range("D:D"), ActiveSheet.UsedRange)
 For Each cell In rng
   If (cell.Value) = "72" _
   Or (cell.Value) = "19" _
    Or (cell.Value) = "7" Then
       If del Is Nothing Then
          Set del = cell
       Else: Set del = Union(del, cell)
       End If
    End If
 Next cell
 On Error Resume Next
 del.EntireRow.Delete
End Sub
 
Hallo Vrouw,

Ik heb zoiets ooit eens opgelost door de volgende code te gebruiken.
(ik heb hem nu even iets aangepast en niet getest)


Code:
Sub Delete_Rows()
 Dim rng As Range, cell As Range, del As Range
 Set rng = Intersect(Range("D:D"), ActiveSheet.UsedRange)
 For Each cell In rng
   If (cell.Value) = "72" _
   Or (cell.Value) = "19" _
    Or (cell.Value) = "7" Then
       If del Is Nothing Then
          Set del = cell
       Else: Set del = Union(del, cell)
       End If
    End If
 Next cell
 On Error Resume Next
 del.EntireRow.Delete
End Sub

WHOW en super snel ook!!:thumb:
Thanks hoor
 
Hmm, nu deze code in het echte bestand geszet is de PC toch well aan hetstressen.
Het bestand bestaad uit 45.000 regels en dat vind Excel en mijn PC niet leuk!!

Zou het ook nog anders(vriendelijker) kunnen?
 
Bij verwijderen van regels altijd onderaan beginnen

Code:
Public Sub pfDelRows()
Application.ScreenUpdating = False
totalrows = ActiveSheet.UsedRange.Rows.Count

For Row = totalrows To 1 Step -1
    If (Cells(Row, 4).Value = 7 Or Cells(Row, 4).Value = 19 Or Cells(Row, 4).Value = 72) Then
    Rows(Row).Delete
    End If
Next Row
Application.ScreenUpdating = True
End Sub

Niels
 
Maakt niet veel uit hoor, blijft stressen duurt paar minuten voordat ie klaar is.
 
Beste vrouw, ;)

En met deze ?

Code:
Sub verwijderen()
Application.ScreenUpdating = False
For Each cl In Range("D1:D45000")
If cl= 7 Or cl = 19 Or cl = 72 Then
cl.Rows.EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
End Sub

Groetjes Danny. :thumb:
 
Als het om zoveel rijen gaat, is het beter om te filteren zodat je niet per rij hoeft te controleren.

Code:
Sub Verwijder()
Dim iTel As Integer
    For iTel = 1 To 3
        Range("D:D").AutoFilter 1, WorksheetFunction.Choose(iTel, 7, 19, 72)
        Range("D:D").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Next
End Sub

Met vriendelijke groet,


Roncancio
 
He, top mannen:cool:
Ik ben morgen vrij en zal donderdag eea eens gaan proberen,
Jullie horen het van me:thumb:
 
Bij verwijderen van regels altijd onderaan beginnen

Code:
Public Sub pfDelRows()
Application.ScreenUpdating = False
totalrows = ActiveSheet.UsedRange.Rows.Count

For Row = totalrows To 1 Step -1
    If (Cells(Row, 4).Value = 7 Or Cells(Row, 4).Value = 19 Or Cells(Row, 4).Value = 72) Then
    Rows(Row).Delete
    End If
Next Row
Application.ScreenUpdating = True
End Sub

Niels

Hallo Niels28
Ik ben vrij nieuw in dit soort dingen.

De macro werkt prima voor cijfers.
Maar ik heb wel eens rijen waar #N/B staan.
Wanneer dit zich voor doet werkt het query niet.
Hoe de macro eruit moeten zien wanneer cijfers en #N/B verwijderd moeten worden.
Alvast bedankt.
 
Dit topic is gedateert, m.a.w. het is ouder dan drie maanden en mag dus met rust gelaten mag worden. Topic gaat op slot en wordt overgedragen aan de afdeling BNw(Betere Naslagwerken)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan