Supportnet Computer
Planet of Tech

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.

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 Sub


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.

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

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.

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

Antwort 5 von coros

Hi Christian,

setze einfach vor die Codezeile

Range(Cells(1, 1), Cells(letzte_Zeile, 1)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

den Befehl

On Error Resume Next


Damit 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

Antwort 7 von coros

Hi guethi,

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 Sub


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.

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

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


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.

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 Sub


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.

Antwort 10 von guethi

Hi Coros,

gerade noch abschließend - hat alles geklappt!Dankeschön!

Viele Grüße,

guethi

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: