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

Tussen liggende cellen deleten

Status
Niet open voor verdere reacties.

Jansap

Gebruiker
Lid geworden
20 okt 2005
Berichten
70
hallo allemaal.

Ik heb een sheet met daarin 54309 regels.
nu is het zo dat ik een korte routine zoekt die cellen delete die aan het criterium voldoen leeg. Zie voorbeeld in kolom d staan lege cellen terwijl in kolom e t/m m stukjes informatie staat. De lege cellen van kolom d moeten gedelted worden zodat er weer een fatsoenlijke kolom ontstaat.
de informtaie van kolom e t/m/ m mogen ook een cel verplaatst worden, bereik je het zelfde effect mee.
Wie kan en wil mij even helpen.
Om nu dit alle smet de hand te doen is wat overdreven.

Thanks voor de respons
 

Bijlagen

Heel simpel kun je de autofilter gebruiken. Selecteer de 2 kolomen en klik het volgende aan:
Menu>Data>Filter>Autofilter

Selecteer "niet lege cellen"
 
lege cellen

Dat klopt dan komt er een overzicht van de lege cellen met daarachter de info die op moet schuiven. Je kan volgens mij niet de cellen deleten, alleen maar rijen en kolommen.

Groeten

Jan
 
Hoi Jansap,

Is dit de bedoeling :eek:

ALT+F8 om de macro te starten. Macro naam = Del_Cel

Suc6
 

Bijlagen

Hoi,

Er bestaat ook nog ziets als Bewerken - Ga naar - Speciaal - Lege waarden. Vervolgens Bewerken - Verwijderen - Cellen naar boven verplaatsen.
Dit werkt alleen voor een bereik van maximaal 30.000 cellen. Aangezien jij meer dan 30.000 rijen gevuld hebt, kun je het in twee maal handmatig doen.
Overigens heb ik de macro van Spiderman niet bekeken. Dat zal een stuk sneller zijn, maar ik hou ervan om alle mogelijkheden van Excel te kennen en begrijpen.

Richard
 
Hoi,

@richard1970

Die mogelijkheid kende ik nog niet. Ik heb er gelijk eventjes een Macrotje van gemaakt.

Werkt nog sneller:)
Code:
Range("D:D").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
 
Ik denk dat dit nog iets performanter is indien het zoals hier over vele 1000en rijen gaat.

Code:
Intersect(Range("D:D"), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp

Ben dus niet zeker.

Wigi
 
Hoi Wigi,

Waarom is beter
Code:
Intersect(Range("D:D"), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
dan
Code:
Range("D:D").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp


Waar zit het verschil in?
 
Hoi Wigi,

Waarom is beter
Code:
Intersect(Range("D:D"), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
dan
Code:
Range("D:D").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp

Waar zit het verschil in?

Ik ben dus niet zeker, maar in mijn voorstel beperk je eerst de te evalueren cellen tot die die behoren tot de usedrange. Als je tijd hebt kan je misschien eens de tijd opnemen dat het duurt om dit uit te voeren, bij +/- 50000 gebruikte rijen, en lege cellen er random tussen gezet. De Timer functie kun je gebruiken om de duurtijd van de macro (in sec.) te laten weergeven. Ik ben echt benieuwd. (Bij weinig rijen zal het geen noemenswaardig verschil opleveren natuurlijk).

Wigi
 
Hoi Wigi,

Heb ff een test gemaakt.

Ik wilde hem hier uploaden, maar hij is te groot.

Ik heb hem op http://www.fransensoftware.com/TimeTest.zip gezet.

Kijk maar eens :rolleyes:

Volgens mij (op mijn PC) maakt het weinig uit met 30000 cellen. Eerst had ik het sneller, dan eens gelijk, en dan jouw methode.

Dit heb ik als code gebruikt (iets aangepast van jouw code):

Code:
Sub VulBladRandom()

    Randomize
    For x = 1 To 30000
    RandomNR = Int(30000 * Rnd + 1)
        Range("A" & RandomNR).Value = Time
    Next x
    Columns(1).Copy Range("B1")
    MsgBox "Klaar"
End Sub

Sub DeleteLegeCellen()

Dim t1 As Date, t2 As Date, t3 As Date, t4 As Date
t1 = Timer
Intersect(Range("A:A"), ActiveSheet.UsedRange).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
t2 = Timer

t3 = Timer
Range("B:B").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
t4 = Timer
MsgBox "Totale tijd Wigi methode: " & Round(t2 - t1, 2) & " seconden" & vbCrLf & _
       "Totale tijd Arno Methode: " & Round(t4 - t3, 2) & " seconden"
End Sub

Kortom, het maakt dus weinig uit. Hebben weer wat bijgeleerd.

Wigi
 
Hoi Wigi,

Dim t1 As Date, t2 As Date, t3 As Date, t4 As Date

Klopt. Ik werk tegenwoordig meer met VB.NET, daar kun je wel gewoon alles van 1 type achter elkaar zetten. Bij VB(x) en VBA zet hij ze om naar integer meen ik me te herinderen.


Kortom, het maakt dus weinig uit. Hebben weer wat bijgeleerd.
Zijn we nooit te oud voor :)
 
Bij VB(x) en VBA zet hij ze om naar integer meen ik me te herinderen.

Excel maakt er een Variant van, geen integer (want dan zou je de tijd niet kunnen opslaan in die integer variabele en krijg je een foutmelding.)
 
Hoi Wigi
Excel maakt er een Variant van, geen integer (want dan zou je de tijd niet kunnen opslaan in die integer variabele en krijg je een foutmelding.)
Vandaag 13:15


Klopt :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan