Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
488to492
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
488to492
488to492
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatisieren von Prüfen und Löschen

Automatisieren von Prüfen und Löschen
26.09.2004 08:15:30
Prüfen
Hallo,
ich habe eine Spalte vorliegen und gehe folgendermaßen vor:
Ich Beginne bei Zelle x und gehe zu Zelle x+5, wenn Zelle x+5 keinen Inhalt hat, wird ausgeführt:
Zellen löschen / Zellen nach oben verschieben (für Zelle x+5)
Dann gehe ich zu Zelle x+10 und schaue ob etwas drin steht, wenn nicht, dann wieder löschen und alles nach oben verschieben.
usw. für nacheinanderfolgende Zellen x+5k
Da meine Spalte sehr lang ist...wie kann ich diesen Vorgang von Excel automatisieren lassen?
Danke im Voraus.
Gruß
Huseyin
AW: Automatisieren von Prüfen und Löschen
Prüfen
Hallo Huseyin,
wie gefällt Dir das?
Da meine Glaskugel z. Zt. In Reparatur ist, habe ich in meinem Vorschlag mal als "Zelle x" die gerade aktive Zelle (ActiveCell) angenommen.

Sub Huseyin()
Dim reR As Byte
Dim acC As Integer
Dim acR As Long, laR As Long, laRx As Long, i As Long
Application.ScreenUpdating = False
acC = ActiveCell.Column
acR = ActiveCell.Row
laR = Cells(Rows.Count, acC).End(xlUp).Row
laRx = laR - acR + 1
If laRx <= acR Then Exit Sub
reR = laRx Mod 5
laRx = laR - reR
For i = laRx To acR + 4 Step -5
If Cells(i, acC).Text = "" Then
Cells(i, acC).Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: Automatisieren von Prüfen und Löschen
Prüfen
hallo huseyin
versuch mal so:
in der zeile "start = 1" kannst du anstatt der 1 deine zeile x anpassen.
in der zeile "If Cells(i, 1).Value = "" Then" kannst du anstatt der 1 die spalte anpassen. die 1 steht im moment für spalte "a". für spalte "B" müsste da eine 2 rein, usw.

Sub leere_weg()
Dim i As Long
Dim start As Long
start = 1
For i = start To Sheets(1).UsedRange.Rows.Count Step 5
If Cells(i, 1).Value = "" Then
Rows(i).Delete
i = i - 1
End If
Next
End Sub

ransi
AW: Automatisieren von Prüfen und Löschen
Prüfen
Hallo
hast du das mal probiert ? :-)
1. Spätestens nach dem ersten Löschvorgang kommt deine Schleife ins straucheln
Zur Info:
UsedRange breücksichtigt alle formatierten Zellen, auch wenn nix drin steht und ist eigentlich völlig ungeeignet zur klaren Identifizierung einer Zelle oder eines Zellbereiches.
Sheets sind alle Inhalte einer Mappe, auch Diagrammblätter
Ich würde dir empfehlen
For i = Worksheets("Tabelle1").Cells(65536.1).End(xlup).Row to 2 Step -5
Damit bringst du "i" durch das löschen nicht durcheinander ;-)
Gruss Rainer
Anzeige
AW: Automatisieren von Prüfen und Löschen
Prüfen
Besser:
For i = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlup).Row to 2 Step -5
Ggf. gibts ja in der nächsten Excelversion mehr Zeilen?
Ulf
AW: Automatisieren von Prüfen und Löschen
Prüfen
Danke für die schnellen Antworten. Ja, ich gebe Rückmeldungen, frage ja nicht das erste mal :D
Ehrlich gesagt....ich bin keinen Schritt weiter. Habe, wie ich ja angegeben habe, von Excel so gut wie überhaupt keine Ahnung, wo muss ich jetzt welche Formel oder welchen Subprogrammcode reinschreiben und wie ausführen auf meine Spalte?
Gruß
Huseyin
AW: Automatisieren von Prüfen und Löschen
Prüfen
Hallo Ulf
"..Ggf. gibts ja in der nächsten Excelversion mehr Zeilen?..."
Ist klar. Hoffentlich gibt's dann auch mehr Spalten :-) *lol*
Gruss Rainer
Anzeige
AW: Automatisieren von Prüfen und Löschen
Prüfen
guten morgen rainer
danke für die tipps.
probiert habe ich es vorher.
hatt geklappt, allerdings war usedrange.rows.count auch nur 50, also neues blatt mit 50 einträgen in "A".
wenn ich nun aber von unten anfange zu löschen, kann ich aber doch keine startzeile angeben.
für den fall das ich i ins "straucheln bringe" (gut ausgedrückt) mach ich doch wieder i= i-1.
damit würds wieder passen.
habs mal geändert mit der usedrange.

Sub leere_weg()
Dim i As Long
Dim start As Long
start = 1
For i = start To Worksheets("Tabelle1").Cells(65536, 1).End(xlUp).Row - 1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
i = i - 1
End If
Next
End Sub

ransi
Anzeige
AW: Automatisieren von Prüfen und Löschen
Prüfen
Tja, und wie binde ich diesen Code jetzt wo ein?
Gruß
Huseyin
AW: Automatisieren von Prüfen und Löschen
Prüfen
hallo huseyin
click mal mit der rechten maus auf den Tabellenreiter deiner tabelle.
code anzeigen
und da rein kopieren.
mit F5 startest du den code.
nimm aber eine kopie deiner originaldatei zum prüfen ob der code richtig läuft.
Änderungen in der tabelle die mit vba gemacht worden sind, kannst du nämlich NICHT rückgängig machen.
ransi
AW: Automatisieren von Prüfen und Löschen
Prüfen
VIELEN DANK!
Nur eine Frage noch: Wie kriege ich das Ding zum stoppen? Auf "Stob" in VB zu drücken geht nicht, er reagiert nicht und muss manuell zum Absturz gebracht werden, damit man Excel wieder unter Kontrolle hat. Könntest du da was einbauen, dass er nach z.B. 1000 Zeilen aufhört?
Gruß
Huseyin
Anzeige
makro zuweisen
ransi
hallo huseyin
so läuft "das Ding" in 5er Schritten von zelle "a start" in Tabelle1 bis zur letzten gefüllten zelle in spalte "a" in Tabelle1.

Sub leere_weg()
Dim i As Long
Dim start As Long
start = 1
For i = start To Worksheets("Tabelle1").Cells(65536, 1).End(xlUp).Row Step 5
If Cells(i, 1).Value = "" Then
Rows(i).Delete
i = i - 1
End If
Next
End Sub

so bis zur zeile 1000:

Sub leere_weg()
Dim i As Long
Dim start As Long
start = 1
For i = start To 1000 Step 5
If Cells(i, 1).Value = "" Then
Rows(i).Delete
i = i - 1
End If
Next
End Sub

einbinden kannst das z.B. so:
füge irgendeine grafik, oder eine schaltfläche aus formular ein.
rechte maus drauf
makro zuweisen....
dann leere-weg auswählen.
Bei jedem click auf die grafik wird dann das makro gestartet.
ransi
Anzeige
AW: makro zuweisen
Huseyin
Danke, jetzt gehts richtig! Ich brauche das nicht als Grafikanwendung, sondern muss das nur einmalig auf eine ellenlange Spalte anweden. Danke nochmals euch allen für die Hilfe.
Gruß
Huseyin
AW: Automatisieren von Prüfen und Löschen
Prüfen
Tja, und wie binde ich diesen Code jetzt wo ein?
Gruß
Huseyin
AW: Automatisieren von Prüfen und Löschen
Prüfen
Hallo Ransi
"..wenn ich nun aber von unten anfange zu löschen, kann ich aber doch keine startzeile angeben..."
Die Startzeile hast du doch ermittelt mit Rows.Count.
In meinem Beispiel
For i = Worksheets("Tabelle1").Cells(65536,1).End(xlup).Row to 2 Step -5
oder wie Ulf
For i = Worksheets("Tabelle1").Cells(Rows.count,1).End(xlup).Row to 2 Step -5
sucht er aufsteigend von 65536 nach der ersten Zelle mit einem Eintrag in Spalta A und gibt diese Zeilennummer zurück. Wenn nun in Zeile 235 etwas steht, folgt daraus übersetzt
For i = 235 to 2 Step -5
Damit hast du deine Startzelle eben in Cells(i,1) oder ausgeschrieben Cells(235,1) :-)
Gruss Rainer
Anzeige
@ rainer
ransi
hallo rainer
schon klar, aber:
"Ich Beginne bei Zelle x und gehe zu Zelle x+5, wenn Zelle x+5 keinen Inhalt hat, wird ausgeführt.." hatte ich so verstanden:
ich will sagen in welcher zeile das ganze losgehn soll.
wenn jetzt "Worksheets("Tabelle1").Cells(65536,1).End(xlup).Row" = 235
dann bekomme ich doch nach ausführung des codes ein anderes ergebniss als wenn
"Worksheets("Tabelle1").Cells(65536,1).End(xlup).Row" = 236 ?
korrigier mich bitte wenn ich daneben liege.
ransi
In einem Punkt hast du Recht....
Ramses
Hallo Ransi
Ich bin, warum auch immer :-), davon ausgegangen, dass die entsprechenden "Zellpakete" von 5 Zellen jeweils ausgefüllt sind.
Dann könnte ich mit
For i = Worksheets("Tabelle1").Cells(Rows.count,1).End(xlup).Row to 2 Step -5
If Cells(i-4,2) = ""
bla bla bla
das ganze von unten machen.
Wenn allerdings die "Zellpakete" nicht vollständig sind,... dann bekomme ICH Probleme :-)
Da liegst du mit deiner Variante im sichereren Bereich :-)
Gruss Rainer
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige