Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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
Inhaltsverzeichnis

Zeilen mit bedingter Formartierung lösch

Zeilen mit bedingter Formartierung lösch
30.05.2020 04:33:13
Andi
Hallo Zusammen
In Tabelle 1 in Spalte A habe ich 300 Nachnamen mit Vornamen stehen .
Es gibt eine bedingte Formartierung die mir gleiche (Doppelte) Namen mit Farbe untelegt.
Gibt es ein VBA das mir automatisch die Zeilen löscht welche mit Farbe (also gleich oder doppelte Namen)
unterlegt sind?
L.G. Andi

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen mit bedingter Formartierung lösch
30.05.2020 07:44:47
Daniel
Hi
Verwende den Autofilter.
Filtere nach der Farbe und lösche die Zeilen.
Der Autofilter erkennt auch Farben, die über die bedingte Formatierung erzeugt werden.
In gefilterten Tabellen werden nur die sichtbaren Zeilen gelöscht, die ausgeblendeten bleiben stehen.
Probiers erstmal von Hand. Wenn es funktioniert, kannst du den dazugehörenden VBA-Code mit dem Recorder erzeugen.
Gruß Daniel
AW: Zeilen mit bedingter Formartierung lösch
30.05.2020 11:09:45
Martin
Hallo Andi,
dein Ansatz ist eher ungünstig. Es gibt zwar eine SpecialCells(xlCellTypeAllFormatConditions)-Methode um Zellen mit Bedingter Formatierung zu finden, aber das Ergebnis einer Formatierten Bedingung abzufragen ist eher schwierig und unkonventionell.
Lass VBA besser die doppelten Zellen erkennen und löschen:
Sub TwinKiller()
Dim objDic As Object
Dim rngRowCell As Range
Dim rngToDelete As Range
Set objDic = CreateObject("Scripting.Dictionary")
For Each rngRowCell In Sheets("Tabelle1").UsedRange.Columns(1).Cells
If Not objDic.Exists(rngRowCell.Text) Then
objDic.Add rngRowCell.Text, 1
ElseIf rngRowCell.Text  "" Then
If rngToDelete Is Nothing Then
Set rngToDelete = rngRowCell
Else
Set rngToDelete = Union(rngToDelete, rngRowCell)
End If
End If
Next
If Not rngToDelete Is Nothing Then
rngToDelete.Rows.Delete
End If
End Sub
Viele Grüße
Martin
Anzeige
AW: Zeilen mit bedingter Formartierung lösch
30.05.2020 13:44:34
Andi
Hallo Martin
Danke super aber ich habe leider nicht erwähnt das in Spalte B die Adresse steht jetzt rückt die Automatisch in Spalte A rüber! Kann mann Spalte B Automatisch mitlöschen?
Gruß Andi
AW: Zeilen mit bedingter Formartierung lösch
30.05.2020 14:11:47
Andi
Hallo Martin
Nochmals Nachgedacht !!
Kann man die ganzen Zeilen löschen die Formartiert sind?Die Namen sind mit Sverweiß in Tabelle 2 vorab eingelesen und da entstehen jetzt wieder Zellen mit Fehlermeldung "Bezug" die muss ich erst wieder von Hand löschen. Denke wenn gesamte Zeile gelöscht wird dann entsteht das Problem Nicht.
Gruß Andi
AW: Zeilen mit bedingter Formartierung lösch
30.05.2020 15:11:21
Martin
Hallo Andi,
leider kann ich das Problem aus deinem Feedback nicht nachvollziehen. Mit der Zeile

rngToDelete.Rows.Delete
werden bereits die ganzen Zeilen gelöscht. Das Wort Rows steht für Zeile. Würdest du das Wort Rows entfernen, würden nur die Zellen in Spalte A gelöscht werden.
Viele Grüße
Martin
Anzeige
Dem ist nicht so, der Code ist falsch
30.05.2020 19:41:35
EtoPHG
Martin,
Andi hat Recht, Dein Code löscht nur einzelne Zellen aus Column(1)!
Damit verlieren die Daten der rechts davon stehenden Spalten und der Anwender steht mit einem Datensalat da, weil er ja das ganze nicht rückgängig machen kann.
Zudem ist auch der Prozedurname "TwinKiller" irreführend, da ja nicht Twins, sonder Duplikate gelöscht werden.
Ein böser Schnitzer für einen selbsternannten VBA-Fortgeschrittenen bzw. -Profi!
Was meinst du warum VBA zwischen .Rows und .EntireRow unterscheidet? Schau in der Hilfe nach! ;-)
Der einfachste Vorschlag, nämlich die Menüfunktion "Duplikate entfernen" habe andere Helfer schon erwähnt.
Gruess Hansueli
Anzeige
Warum behebst du den Fehler nicht einfach?
30.05.2020 20:36:20
Martin
Hallo Hansueli,
anscheinend bist du heute mit dem falschen Fuß aufgestanden, Hansueli?!
Es ist richtig, dass ich mich bei Rows verschrieben habe und es EntireRow heißen muss. Dir zuliebe habe ich sogar den Makronamen geändert. Ich schreibe meine Codes gerne abwärtskompatibel. Auf älteren Rechnern läuft manchmal noch Excel 2003 oder noch älter. Damals gab es die "Duplikate entfernen"-Funktion noch nicht.
Und um (d)einen Hinweis mit der angegeben Excel-Version "2016 - 16.0" zu vermeiden: Es gibt auch Menschen, die verwenden Leerzeichen statt Tabulator oder rücken ihren Code überhaupt nicht ein. Ziel ist es doch hier anderen zu helfen und bekanntlich führen viele Wege nach Rom.
Viele Grüße
Martin
Sub RemoveDuplicates()
Dim objDic As Object
Dim rngRowCell As Range
Dim rngToDelete As Range
Set objDic = CreateObject("Scripting.Dictionary")
For Each rngRowCell In Sheets("Tabelle1").UsedRange.Columns(1).Cells
If Not objDic.Exists(rngRowCell.Text) Then
objDic.Add rngRowCell.Text, 1
ElseIf rngRowCell.Text  "" Then
If rngToDelete Is Nothing Then
Set rngToDelete = rngRowCell
Else
Set rngToDelete = Union(rngToDelete, rngRowCell)
End If
End If
Next
If Not rngToDelete Is Nothing Then
rngToDelete.EntireRow.Delete
End If
End Sub

Anzeige
AW: Warum behebst du den Fehler nicht einfach?
30.05.2020 22:14:16
Andi
Hallo Hansueli, Hallo Martin
Jetzt habe ich aber Diskussionen ausgelöst. Tut mir leid!
Ich sage einfach vielen vielen Dank ihr habt mir sehr geholfen es funktioniert super
Gruß Andi
Und dann? Sind alle weg!
30.05.2020 14:06:54
Luc:?
Bissken mehr PgmmierArbeit dürfte es wohl schon sein, Daniel… ;-]
Gruß, Luc :-?
Sollen doch auch
30.05.2020 14:59:20
Daniel
Es sollen laut fragestellung ja auch alle gefärbten Zeilen weg.
Mehr Programmieraufwand ist es nicht.
Das kann man aus seinem Text herauslesen, ...
30.05.2020 15:45:58
Luc:?
…Daniel,
was aber nicht logisch ist. Martin hat das sicher auch so gesehen, denn sein Pgm löscht nur die Wiederholungen. Aber gerade auch nach Andis letztem Post ist zu vermuten, dass das ganze Projekt nicht gut überlegt ist.
Martins Ergebnis wäre mit deiner Methode so einfach zu erreichen, wenn die BedingtFormatierung nicht alle Doppelten (inkl ErstAuftritt), sondern nur die Wiederholungen färben würde. Das wäre per letztem MenüPkt mit folgender RegelFml möglich (hier für 20 Zeilen der Spalte A):
=INDEX(HÄUFIGKEIT(VERGLEICH(A$1:A$20;A$1:A$20;0);VERGLEICH(A$1:A$20;A$1:A$20;0));ZEILE(A1))=0
Und anstelle von Martins schneller Prozedur könnte natürlich auch eine universellere UDF wie die für MengenOperationen bestimmte DataSet verwendet wdn, viell sogar (ggf über einen Umweg) in der BedingtFormatierung, was ich aber nicht ausprobiere, zumal ja doch noch etliches im Argen zu liegen scheint.
Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
Dann noch einfacher
30.05.2020 18:26:17
Daniel
Ich kenne die Aufgabenstellung nicht.
Wenn der Fragesteller schreibt, dass er alle per bedingter Formatierung gefärbten Zeilen löschen will, dann zeige ich ihm wie das geht.
Wenn das nicht das eigentliche Problem ist, muss er lernen seine Fragen besser zu stellen.
Alternativ gibts für das Löschen von
Duplikaten mit Ausnahme des ersten Eintrags ja die Menüfunktion Daten - Datentools - Duplikate entfernen.
Dann wird die Makroprogrammierung noch einfacher, weil man dann nur noch diese Funktion auslösen muss, dh. eine einzige Programmzeile, die der Recorder auch aufzeichnet.
Das sollte eigentlich jeder Excelanwender hin bekommen.
Anzeige
Ja, stimmt, ...
30.05.2020 20:13:07
Luc:?
…und dann noch .EntireRow im Pgm, was Martin vergessen hatte (vgl Hansueli).
Luc :-?
EntireRow braucht man nicht unbedingt
30.05.2020 23:23:14
Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige