Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile nicht löschen, wenn farbige Zelle vorkommt

Zeile nicht löschen, wenn farbige Zelle vorkommt
08.08.2024 10:32:47
Klaus Putterlik
Hallo Freunde,
ich hoffe, mir kann hier geholfen werden.
Ich lösche mittels VBA Zeilen aus einer Tabelle, einziges, momentanes Kriterium ist das Datum (Spalte 4). Jetzt habe ich aber auch Zeilen, in denen farbige Zellen vorkommen, diese Zeilen sollen auf keinen Fall gelöscht werden, egal welches Datum in Spalte 4 steht. Wie kann ich das in den vorhanden Code einbauen? evtl. mit "And Not ..." in die If-Bedingung?

Sub delete_old()


Application.DisplayAlerts = False

Dim j As Long
Dim lastrow As Long
Dim d As Date

Sheets("Help").Select
Range("B2").NumberFormat = "yyyy-mm-dd"
d = Sheets("Help").Range("B2")

Sheets("imported data").Select

lastrow = Cells(Rows.Count, 4).End(xlUp).Row

For j = lastrow To 2 Step -1
If Cells(j, 4).Value d - 8 Or Cells(j, 4).Value > d Then
Rows(j).Delete 'wenn farbige Zelle in Zeile vorhanden, dann nicht löschen, aber wie?
End If
Next j

Range("A1").Select

Application.DisplayAlerts = True

End Sub


Vielen Dank schon im Voraus.
Gruß Klaus
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile nicht löschen, wenn farbige Zelle vorkommt
08.08.2024 10:54:35
Oberschlumpf
Hi Klaus,

zeig doch bitte mal per Upload eine Excel-Bsp-Datei mit genügend Bsp-Daten.
Mit Datei können wir besser testen.

Und...wie genau erhalten deine Zellen die Farben? Einfache Farbzuteilung oder durch bedingte Formatierung?

Ciao
Thorsten
AW: Zeile nicht löschen, wenn farbige Zelle vorkommt
08.08.2024 11:09:23
GerdL
Hallo Klaus,

ungetestet.
Function Farbe(zeile As Long, strBlatt As String) As Boolean


Dim keineFarbe As Long, k As Long

With Worksheets(strBlatt)

keineFarbe = .Cells(.Rows.Count, .Columns.Count).Interior.Color 'Innenfarbe der letzten Zelle
For k = 1 To 17 'Spalten A - Q
If .Cells(zeile, k).Interior.Color > keineFarbe Then
Farbe = True: Exit Function
End If
Next k
End With
End Function
Sub delete_old_II()

Application.DisplayAlerts = False

Dim j As Long
Dim lastrow As Long
Dim d As Date

Sheets("Help").Range("B2").NumberFormat = "yyyy-mm-dd"
d = Sheets("Help").Range("B2")

With Sheets("imported data")

lastrow = .Cells(Rows.Count, 4).End(xlUp).Row

For j = lastrow To 2 Step -1
If .Cells(j, 4).Value d - 8 Or .Cells(j, 4).Value > d Then
If Farbe(j, "imported data") = False Then .Rows(j).Delete 'wenn farbige Zelle in Zeile vorhanden, dann nicht löschen, aber wie?
End If
Next j

Application.Goto .Range("A1").Select
End With

Application.DisplayAlerts = True

End Sub

Oder bitte genauer beschreiben oder siehe Thorstens AW.

Gruß Gerd
Anzeige
AW: Zeile nicht löschen, wenn farbige Zelle vorkommt
08.08.2024 12:02:22
daniel
Hi
im Prinzip so:

if rows(j).Interior.Color = vbWhite then rows(j).Delete


wenn du die Farbe von mehreren Zellen abfragst, bekommst du nur dann die Farbnummer, wenn alle Zeilen die selbe Farbe haben.
sobald eine Zelle oder mehr eine andere Farbe haben, so ist das Ergebnis 0.
lediglich wenn man mit Schwarz arbeitet, muss man aufpassen, denn Schwarz hat auch die Farbenummer 0.

wenn die Farben durch die Bedingte Formatierung erzeugt werden, dann:

if rows(j).DisplayFormat.Interior.Color = vbWhite then rows(j).Delete


Gruß Daniel

Anzeige
AW: Zeile nicht löschen, wenn farbige Zelle vorkommt
08.08.2024 14:05:40
Klaus
also erstmal vielen Dank an Thorsten, Daniel und Gerd !!!

Die Lösung kann ja so einfach sein.
if rows(j).Interior.Color = vbWhite then rows(j).Delete


Das funktioniert einfach super, hier der gesamte Code dazu

Sub delete_old()


Application.DisplayAlerts = False

Dim j As Long
Dim lastrow As Long
Dim d As Date

Sheets("Help").Select
Range("B2").NumberFormat = "yyyy-mm-dd"
d = Sheets("Help").Range("B2")

Sheets("imported data").Select

lastrow = Cells(Rows.Count, 4).End(xlUp).Row

For j = lastrow To 2 Step -1
If Cells(j, 4).Value d - 8 Or Cells(j, 4).Value > d Then
'Rows(j).Delete
If Rows(j).Interior.Color = vbWhite Then Rows(j).Delete
End If
Next j

Range("A1").Select

Application.DisplayAlerts = True

End Sub


Vielen Dank
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige