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

regels verwijderen middels macro

Status
Niet open voor verdere reacties.

Etienne1978

Gebruiker
Lid geworden
3 mei 2012
Berichten
32
Hallo,

Ik ben bezig met het maken van een macro waarbij ik ik alle regels waarbij cel b leeg is moet verwijderen. Op zich geen probleem maar het punt is dat als ik de macro laat lopen hij bij de eerste lege cel in kolom b de regel niet verwijderd en weer helemaal bovenaan de spreadsheet begint.
De formule die ik gebruik in de macro is (deze gebruik ik vaker en dan werkt hij wel):

Sub rijenverwijderen()

'macro rijen verwijderen
'verwijderd rijen waarbij cel b leeg is

Dim intaantalrijen As Integer
Dim i As Integer
Dim currentcell As Range

Range("bBekijk bijlage vbdebsal.xls1").Select
intaantalrijen = ActiveCell.CurrentRegion.Rows.Count

For i = 1 To intaantalrijen
For Each currentcell In Selection.Cells
If currentcell.Value = Empty Then
currentcell.EntireRow.Delete
ActiveCell.Select
Else
ActiveCell.Offset(1, 0).Select
End If
Next currentcell
Next i


End Sub


Kan iemand mij vertellen waarom hij nu fout gaat en wat ik wel moet doen.
Alvast bedankt.
 
het bestand heb ik pr abuis bij range gezet (bvdebsal) in de formule staat Range("b1").select
 
Etienne,

Vervang je code door deze regel. Die kijkt naar kolom B en verwijdert alle regels.

Code:
Columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 
Etienne1978,

De helpers hebben graag dat je de code tussen codetags zet.
Dit doe je door je code te selecteren en dan boven in het menu op # te klikken.
Nu staat je code in een apart vak.
 
dank je rvangalen hij werkt maar kun je hem ook uitleggen?

excelamateur ben nieuw hier en begrijp niet zo goed wat u bedoeld.
 
Kijk in de VBA-help eens bij SpecialCells en er zal al veel duidelijk worden.

PS Wil je toch andere code gebruiken, rijen worden altijd verwijderd van beneden naar boven maw beginnnend bij de onderste cel in je kolom en zo verder naar boven.
 
Laatst bewerkt:
De code kijkt naar alle lege cellen in kolom B en verwijdert vervolgens die lege regels. Vervang "delete" eens door "Select" en zie wat er gebeurt.
 
oke bedankt. en voor het verwijderen van tekst of ----- in kolom a werkt dat hetzelfde?
 
Die code lijkt erop maar is net anders. Ik zie in je voorbeeld alleen geen tekst of iets dergelijks staan. Dus als dat er zou staan moet je wel oppassen dat je geen regels verwijdert waarvan in andere kolommen dan A gegevens staan die je nodig hebt. Als dat wel zo is moet je de suggestie van Rudi gebruiken.

Kan je anders een voorbeeld geven hoe het in kolom A zou moeten werken?
 
in kolom a staat soms ---- of SZDB of ----- of Grp of ook deze regels moeten volledig verwijderd worden. In mijn vraag is ook een bestand bijgevoegd daarin kin je het zien. het bestand heet vbdebsal en staat in de formule heb ik per abuis verkeerd geplaatst
 
heb zelf een macro gemaakt waarbij het restant wat ballast is wordt verwijder. Bedankt voor het oplossen van mijn eerste vraag
 
Etienne,

In je voorbeeldbestand staat er alleen in de celen A1 en A7 gegevens. Maar als je zeker weet dat de hele regel weg kan zou je de onderstaande code kunnen gebruiken.

Code:
Columns(1).SpecialCells(xlTextValues).EntireRow.Delete
 
Hallo Ronald,

ik weet niet of het mag maar ik heb eigenlijk een aanvullende vraag?
Als het niet kan hoor ik het ook wel neem ik aan.

En wat als ik niet de hele rij wil verwijderen/ wissen? Dus bv alleen bepaalde cellen in de bedoelde rij.
Is cel B8 "" dan E8; H8; Z8 en bv AD8 leegmaken, en de rest v/d rij laten staan, kan dat ook?

Ben zeer benieuwd,

groet,

Eefje
 
Eefje, inbreken in iemands vraag is niet netjes en overigens verwarrend voor helpers en vraagsteller.
Begin in 't vervolg je eigen vraag en voeg indien nodig een voorbeeldbestand toe om je vraag te verduidelijken.
Code:
Sub tst()
    For Each cl In Range("B2:B100") 'Wijzig hier naar de juiste lengte v/d range
        If cl = "" Then Union(Range("E" & cl.Row), Range("H" & cl.Row), _
            Range("Z" & cl.Row), Range("AD" & cl.Row)).ClearContents
    Next
End Sub
 
Eefje,

Ik zou het als volgt oplossen:

Code:
Sub Leegmaken()
    With Columns(2).SpecialCells(xlCellTypeBlanks)
        .Offset(, 3).ClearContents
        .Offset(, 6).ClearContents
        .Offset(, 24).ClearContents
        .Offset(, 28).ClearContents
    End With
End Sub
 
Hallo Warme Bakkertje en Ronald,

sorry!! Ik zal er in het vervolg aan denken! Maar toch mijn dank dat jullie mij hebben willen helpen, ik was gewoon nieuwsgierig hoe e.e.a. eventueel mogelijk zou zijn.
Dus nogmaals mijn dank.

Hallo alle 2,

ik heb het even geprobeerd, maar bij mij werkt het niet?!
Ik heb het bestandtje bijgevoegd.

Wat doe ik niet goed?


Groetjes,

Eefje
 

Bijlagen

Laatst bewerkt:
Eefje,

Voor beide codes geldt dat er gekeken wordt naar lege cellen in kolom B. Vervolgens wordt voor elke lege cel in kolom B de cellen die 3, 6, 24 en 28 voorbij kolom B liggen leeggemaakt. Jij hebt alleen testgetallen in kolom F staan. Kolom F ligt 4 kolommen voorbij kolom B en wordt niet getest. Zet de getallen in kolom E en/of H en/of Z en/of Ad en je zal wel resultaat zien.
 
Laatst bewerkt:
Eefje, met Offset(Rijgetal,Kolomgetal) bepaal je de plaats v/e cel tov je basiscel.
Dus als bv A1 je basiscel is dan wordt met Offset(2,4) E3 bedoeld, dus vanuit A1 2 rijen omlaag en 4 kolommen naar rechts.
Je kan ook negatieve getallen gebruiken en dan wordt het x-aantal rijen omhoog en x-aantal kolommen naar links, dus als dan E3 je basiscel is kom je terug in A1.
 
Laatst bewerkt:
Dus als bv A1 je basiscel is dan wordt met Offset(2,4) E5 bedoeld

m.i. is dat E3 ipv E5 typefoutje ;-)
 
@ Haije
Oeps, ben ook maar een beginnend VBA-er :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan