[Excel97] Rijen met waarde 0 verwijderen

Pagina: 1
Acties:
  • 711 views sinds 30-01-2008
  • Reageer

  • SierdW
  • Registratie: April 2004
  • Laatst online: 24-06 16:54
Ik zit met een probleem, en heb al gezocht hier op het forum maar kan niemand vinden met hetzelfde probleem. Ik heb maar een klein macro'tje wat de nullen in een selectie moet zoeken en dan de hele rij moet verwijderen. Het macro luidt alsvolgt:

Sub Haalnullenweg()
For Each Cell In Selection
If Cell.Value = "0" Then
Cell.EntireRow.Delete
End If
Next Cell
End Sub

Het macro verwijdert niet alle rijen met de waarde 0 :? Zodra ik een range heb met 10 nullen, verwijdert het macro 5 rijen met de waarde 0, en laat hij 5 rijen met de waarde 0 staan. Wat doe ik fout? Is er misschien een manier om de selectie van beneden naar boven te laten doorlopen want zelf dacht ik dat dit het probleem was.

Sierd

  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 00:20
Ik moet bekennen dat ik de syntax niet helemaal snap, maar for each ... next lijkt me dat ie met een tellertje door de cellen heen gaat; stel, je verwijderd cel 1, cel 2 wordt dan cel 1, maar de teller is bij twee, dus de volgende cel die verwijderd gaat worden was eerst cel 3; de oorspronkelijke cel 2 blijft dus staan (op plek 1): op die manier verwijder je dus de helft van de cellen. Oplossing: als het een normale teller was, bijv.
code:
1
2
3
 For i = 1 To X
Doe iets
Next i
gewoon i weer met een verlagen als een rij verwijderd wordt, maar met deze syntax zou ik niet weten wat je moet verlagen

[ Voor 8% gewijzigd door RikTW op 15-09-2004 11:53 ]


  • SierdW
  • Registratie: April 2004
  • Laatst online: 24-06 16:54
zelf had ik hier ook al aan gedacht, maar mijn probleem was dan dat ik op deze manier niet weet hoe ik de "X" variabel kan maken, de ene keer staan er 4000 waarden in de kolom en de andere keer staan er 6000 waarden. Hoe moet ik dit dan doen, want dan zou het probleem opgelost zijn.

Sierd

Verwijderd

Ik heb geen oplossing maar wel een verklaring; Als de eerste rij verwijdert wordt dan komt de 0 die in de tweede rij staat weer in de eerste rij te staan. Excel denkt vervolgens dat de eerste rij al gecontroleerd is waardoor de eerste rij niet meer verwijdert wordt.

Dit gaat zo door met rij 3,4,5,6 etc...

edit: te laat...

[ Voor 4% gewijzigd door Verwijderd op 15-09-2004 11:55 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Heb je deze Microsoft informatie doorgelezen:

159915 - XL97: How to Delete Cells with a For Each...Next Loop :?

En welke Excel versie hebben we het over?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 00:20
Spider.007 schreef op 15 september 2004 @ 11:54:
Heb je deze Microsoft informatie doorgelezen:

159915 - XL97: How to Delete Cells with a For Each...Next Loop :?

En welke Excel versie hebben we het over?
Dat moet dus haast wel '97 zijn [/gokje] '97 of later

[ Voor 5% gewijzigd door RikTW op 15-09-2004 11:59 ]


  • SierdW
  • Registratie: April 2004
  • Laatst online: 24-06 16:54
En welke Excel versie hebben we het over?
Excel 2000

  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 00:20
SierdW schreef op 15 september 2004 @ 11:53:
zelf had ik hier ook al aan gedacht, maar mijn probleem was dan dat ik op deze manier niet weet hoe ik de "X" variabel kan maken, de ene keer staan er 4000 waarden in de kolom en de andere keer staan er 6000 waarden. Hoe moet ik dit dan doen, want dan zou het probleem opgelost zijn.

Sierd
Ik denk dat het dus moet zijn:
code:
1
2
3
 For i = 1 To Selection.Rows.Count
...
Next i
of iets dergelijks
edit:
en kennelijk niet i met 1 verlagen maar i alleen met 1 verhogen als geen rij verwijderd wordt

[ Voor 11% gewijzigd door RikTW op 15-09-2004 12:06 ]


  • SierdW
  • Registratie: April 2004
  • Laatst online: 24-06 16:54
Geweldig, deze link heeft wel degelijk geholpen, resultaat was als volgt:


Sub nullenverwijderen()
Dim rng As Range, i As Integer
Set rng = Range("b1:b20")
For i = rng.Rows.Count To 1 Step -1
If rng.Cells(i).Value = "0" Then rng.Cells(i).EntireRow.Delete
Next
End Sub

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Dan zal het probleem inderdaad zijn geweest dat Excel telkens 1 cel overslaat zoals [rml]RikTW in "[ Excel97] Rijen met waarde 0 verwijderen"[/rml] ook beschrijft :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate

Pagina: 1