Supportnet / Forum / Tabellenkalkulation
Zeilen unter bestimmten Voraussetzung löschen per Macro
Frage
Hallo,
ich würde gerne per Makro folgendes realisieren:
wenn in Spalte b in einer beliebigen Zelle (die Zeilenanzahl ist unbekannt) kein Wert steht, soll die Zeile, auf die dies zutrifft gelöscht werden.
Viele´n Dank für die potenzielle Hilfe.
Viele Grüße,
guethi
Antwort 1 von coros
Hi guethi,
kopiere nachfolgendes Makro in ein Standard Modul und weise es einer Befehlsschaltfläche zu.
Bei obigen Makro wird zunächst die letzte beschriebene Zeile inin dem Tabellenblatt ermittelt. Danach wird mittels einer Schleife die Zeile, bei der in Spalte B kein Eintrag vorhanden, geleert und zum Schluss werden die Leerzeilen gelöscht.
Ich hoffe, Du hast das so gemeint und Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
kopiere nachfolgendes Makro in ein Standard Modul und weise es einer Befehlsschaltfläche zu.
Option Explicit
Sub Zeilen_löschen()
Dim letzte_Zeile As Long, Wiederholungen As Long
letzte_Zeile = ActiveSheet.UsedRange.Rows.Count
For Wiederholungen = 1 To letzte_Zeile - 1
If Cells(Wiederholungen, 2) = Empty Then
Rows(Wiederholungen).ClearContents
End If
Next
Range(Cells(1, 1), Cells(letzte_Zeile, 1)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End SubBei obigen Makro wird zunächst die letzte beschriebene Zeile inin dem Tabellenblatt ermittelt. Danach wird mittels einer Schleife die Zeile, bei der in Spalte B kein Eintrag vorhanden, geleert und zum Schluss werden die Leerzeilen gelöscht.
Ich hoffe, Du hast das so gemeint und Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von guethi
Hallo Coros,
vielen Dank für die kompetente Hilfe! Das Makro klappt, momentan noch mit einer kleinen Einschränkung: der letzte Wert wird nicht gelöscht (also hängt an meiner Spalte A noch ein "Zellchen" dran). Noch ne Idee für mich?
Viele Grüße
guethi
vielen Dank für die kompetente Hilfe! Das Makro klappt, momentan noch mit einer kleinen Einschränkung: der letzte Wert wird nicht gelöscht (also hängt an meiner Spalte A noch ein "Zellchen" dran). Noch ne Idee für mich?
Viele Grüße
guethi
Antwort 3 von coros
Moin guethi,
sorry, das war mein Fehler. Nimm mal in dem Makro in der Zeile
For Wiederholungen = 1 To letzte_Zeile – 1
die Minus eins (-1) weg, dann sollte es funktionieren.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
sorry, das war mein Fehler. Nimm mal in dem Makro in der Zeile
For Wiederholungen = 1 To letzte_Zeile – 1
die Minus eins (-1) weg, dann sollte es funktionieren.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von guethi
Hi Coros,
ich hab zwischenzeitlich etwas rumprobiert und verstehe sogar ein wenig von dem was du da aufgeschrieben hast.:-)
Nächste Baustelle :-) : wie kann ich eine Klausel einbauen, die überprüft, ob überhaupt noch leerzeilen vorliegen? Beim zweiten Durchlauf des Makros in der selben Tabelle erhalte ich sonst einen Laufzeitfehler.
Viele Grüße,
Christian
ich hab zwischenzeitlich etwas rumprobiert und verstehe sogar ein wenig von dem was du da aufgeschrieben hast.:-)
Nächste Baustelle :-) : wie kann ich eine Klausel einbauen, die überprüft, ob überhaupt noch leerzeilen vorliegen? Beim zweiten Durchlauf des Makros in der selben Tabelle erhalte ich sonst einen Laufzeitfehler.
Viele Grüße,
Christian
Antwort 5 von coros
Hi Christian,
setze einfach vor die Codezeile
den Befehl
Damit wird bei einem Fehler der Befehl zum Löschen der Leerzeilen übersprungen. Somit müsste Dein Code dann folgendermaßen aussehen:
Viel Spaß damit. Bei weiteren Fragen melde Dich.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
setze einfach vor die Codezeile
Range(Cells(1, 1), Cells(letzte_Zeile, 1)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
den Befehl
On Error Resume NextDamit wird bei einem Fehler der Befehl zum Löschen der Leerzeilen übersprungen. Somit müsste Dein Code dann folgendermaßen aussehen:
Option Explicit
Sub Zeilen_löschen()
Dim letzte_Zeile As Long, Wiederholungen As Long
letzte_Zeile = ActiveSheet.UsedRange.Rows.Count
For Wiederholungen = 1 To letzte_Zeile
If Cells(Wiederholungen, 2) = Empty Then
Rows(Wiederholungen).ClearContents
End If
Next
On Error Resume Next
Range(Cells(1, 1), Cells(letzte_Zeile, 1)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Viel Spaß damit. Bei weiteren Fragen melde Dich.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von guethi
Wow, das ging schnell. (Und klappt hervorragend!:-)) Darf ich dich weiter löchern?
Entgegengesetztes Beispiel: ich möchte alle Zeilen löschen, die in Spalte B einen Wert enthalten.Steht dort kein Wert Ich hab versucht selber was zu bauen, aber wie ist denn da der Zustandswert? NotEmpty? Full? :-/ Ist ein bißchen wie Sesamöffnedich.:-)
Kannst du mir ein gutes Buch empfehlen, um mich in VBA einzuarbeiten und solche Sachen mal nachzuschlagen. Würde ja auch gerne selber mal ein bißchen tüfteln.
Viele Grüße und herzlichen Dank,
guethi
Entgegengesetztes Beispiel: ich möchte alle Zeilen löschen, die in Spalte B einen Wert enthalten.Steht dort kein Wert Ich hab versucht selber was zu bauen, aber wie ist denn da der Zustandswert? NotEmpty? Full? :-/ Ist ein bißchen wie Sesamöffnedich.:-)
Kannst du mir ein gutes Buch empfehlen, um mich in VBA einzuarbeiten und solche Sachen mal nachzuschlagen. Würde ja auch gerne selber mal ein bißchen tüfteln.
Viele Grüße und herzlichen Dank,
guethi
Antwort 7 von coros
Hi guethi,
dann sieht das Makro so aus:
Es werden alle Zeilen gelöscht, in denen in Spalte B etwas steht.
Ein Buch kann ich Dir leider nicht empfehlen, da ich selber keines besitze. Das was ich kann, habe ich zum großen Teil durch meinen Beruf und den anderen Teil durch learning by doing. Sorry
Schau mal, ob das Makro so ist, wie Du es Dir gedacht hast. Wenn nicht, dann melde Dich wieder. Natürlich kannst Du Dich auch bei anderen Fragen melden.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
dann sieht das Makro so aus:
Option Explicit
Sub Zeilen_löschen()
Dim letzte_Zeile As Long, Wiederholungen As Long
letzte_Zeile = ActiveSheet.UsedRange.Rows.Count
For Wiederholungen = 1 To letzte_Zeile
If Cells(Wiederholungen, 2) <> "" Then
Rows(Wiederholungen).ClearContents
End If
Next
On Error Resume Next
Range(Cells(1, 1), Cells(letzte_Zeile, 1)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End SubEs werden alle Zeilen gelöscht, in denen in Spalte B etwas steht.
Ein Buch kann ich Dir leider nicht empfehlen, da ich selber keines besitze. Das was ich kann, habe ich zum großen Teil durch meinen Beruf und den anderen Teil durch learning by doing. Sorry
Schau mal, ob das Makro so ist, wie Du es Dir gedacht hast. Wenn nicht, dann melde Dich wieder. Natürlich kannst Du Dich auch bei anderen Fragen melden.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 8 von guethi
Überflüssig zu erwähnen, dass dein Makro hervorragend klappt.:-)
Wenn du´s schon so nett anbietest...ich hab mir ein Makro gesucht (auch aus dem Supportnet), das mir die Dubletten einer Spalte entfernen soll. Das tut es auch, aber es löscht leider beide doppelten Einträge
Siehst du, wo der Fehler ist?
(Und um´s schon grad zu sagen...ich hab noch viel mehr Fragen...:-/). Danke dir schon mal für die tolle Hilfe!
Viele Grüße,
guethi
Wenn du´s schon so nett anbietest...ich hab mir ein Makro gesucht (auch aus dem Supportnet), das mir die Dubletten einer Spalte entfernen soll. Das tut es auch, aber es löscht leider beide doppelten Einträge
Zitat:
Dim Adresse As String, Index As String
Sheets("Tabelle1").Select
Range("a2").Select
While IsEmpty(ActiveCell) = False
Adresse = ActiveCell.Value
i = ActiveCell.Row()
ActiveCell.Offset(1, 0).Select
While IsEmpty(ActiveCell) = False
If ActiveCell.Value = Adresse Then
y = ActiveCell.Row()
Rows(ActiveCell.Row()).Select
Selection.Delete
Rows(i).Select
Rows(ActiveCell.Row()).Select
Selection.Delete
End If
ActiveCell.Offset(1, 0).Select
Wend
Rows(i).Select
ActiveCell.Offset(1, 0).Select
Wend
Dim Adresse As String, Index As String
Sheets("Tabelle1").Select
Range("a2").Select
While IsEmpty(ActiveCell) = False
Adresse = ActiveCell.Value
i = ActiveCell.Row()
ActiveCell.Offset(1, 0).Select
While IsEmpty(ActiveCell) = False
If ActiveCell.Value = Adresse Then
y = ActiveCell.Row()
Rows(ActiveCell.Row()).Select
Selection.Delete
Rows(i).Select
Rows(ActiveCell.Row()).Select
Selection.Delete
End If
ActiveCell.Offset(1, 0).Select
Wend
Rows(i).Select
ActiveCell.Offset(1, 0).Select
Wend
Siehst du, wo der Fehler ist?
(Und um´s schon grad zu sagen...ich hab noch viel mehr Fragen...:-/). Danke dir schon mal für die tolle Hilfe!
Viele Grüße,
guethi
Antwort 9 von coros
Hie guethi,
nim nachfolgenden Code, der macht das was Du möchtest. Kopiere das Makro in ein Standard Modul.
Bei dem Code werden alle Duplikate in Spalte B gelöscht.
Wenn Du eine andere Spalte als Spalte B auf Duplikate überprüfen möchtest, dann musst Du in der Zeile
Letzte_Zeile = Range("B65536").End(xlUp).Row
den Spaltenbuchstaben austauschen und in allen Zeilen, in denen
Cells(1, 2)
oder
Cells(Wiederholungen, 2)
vorkommt, die Spaltenindexzahl (in diesem Fall die Zahl 2) abändern. Die Zahl 2 sagt Spalte B aus, die Zahl 3 würde Spalte C aussagen, die Zahl 4 die Spalte D usw.
Ich hoffe Du kommst klar. Ansonsten melde Dich.
nim nachfolgenden Code, der macht das was Du möchtest. Kopiere das Makro in ein Standard Modul.
Option Explicit
Sub Duplicate_löschen()
Dim Wiederholungen As Long, Letzte_Zeile As Long
Letzte_Zeile = Range("B65536").End(xlUp).Row
For Wiederholungen = Letzte_Zeile To 1 Step -1
If WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(Wiederholungen, 2)), _
Cells(Wiederholungen, 2)) > 1 Then
Cells(Wiederholungen, 2).EntireRow.Delete
End If
Next
End SubBei dem Code werden alle Duplikate in Spalte B gelöscht.
Wenn Du eine andere Spalte als Spalte B auf Duplikate überprüfen möchtest, dann musst Du in der Zeile
Letzte_Zeile = Range("B65536").End(xlUp).Row
den Spaltenbuchstaben austauschen und in allen Zeilen, in denen
Cells(1, 2)
oder
Cells(Wiederholungen, 2)
vorkommt, die Spaltenindexzahl (in diesem Fall die Zahl 2) abändern. Die Zahl 2 sagt Spalte B aus, die Zahl 3 würde Spalte C aussagen, die Zahl 4 die Spalte D usw.
Ich hoffe Du kommst klar. Ansonsten melde Dich.
Antwort 10 von guethi
Hi Coros,
gerade noch abschließend - hat alles geklappt!Dankeschön!
Viele Grüße,
guethi
gerade noch abschließend - hat alles geklappt!Dankeschön!
Viele Grüße,
guethi

