Clever-Excel-Forum

Normale Version: Wert in Zeile gleich Zellwert, Zeile ab Spalte leeren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
habe folgendes Problem:

Ich habe eine Zelle (bspw. B3) auf einem Worksheet, in der ein Datum steht.

Mit diesem Datum soll meine Zeile D14:Z14 überprüft werden.

Ich möchte, wenn das Datum in einer Zelle der Zeile 14 gleich dem aus Zelle B3 ist,
dass ab dieser Spalte in der nächsten Zeile, also Zeile 15 nur die Inhalte gelöscht werden.
Das gleiche dann für die Zeilen 18, 21, 22, 25, 28  (nur als Beispiel)



Das kombinieren dieser Funktionalitäten bekomme ich nicht gelöst.
Habe schon viel gebastelt, aber alles half nicht weiter.


Ich lösche wenn dann die komplette Zeile und dann auch die Datumszeile.
Hier unten ist jetzt nur ein Codeschnipsel.
Vielleicht kann mir jemand weiterhelfen. Danke!


[Das ganze wird später noch in ein temporär erstelltes Workbook eingebunden, welches per E-Mail verschickt wird.]
Code:
Public Sub bedingte_Zeilenloeschung()
'** Ermittlung der letzten Zeile in Spalte A

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

'** Durchlauf aller Zeilen
For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2

'Abfragen, ob in der vierten Spalte der Buchstabe Wert aus B3 steht
If Cells(t, 4).Value = Cells(3,2) Then
Rows(t).Clear
End If
Next t

End Sub
Moin,
ungeprüft ...
Code:
Public Sub bedingte_Zeilenloeschung()
  '** Ermittlung der letzten Zeile in Spalte A
  lz = Cells(Rows.Count, 4).End(xlUp).Rows.Row  'dto. Spalte
  lcol = Cells(1, Columns.Count).End(xlToLeft).Column
  '** Durchlauf aller Zeilen
  For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2
     'Abfragen, ob in der vierten Spalte der Buchstabe Wert aus B3 steht
     If Cells(t, 4).Value = Cells(3, 2) Then
        Range(Cells(t + 1, 4), Cells(t + 1, lcol)).ClearContents
     End If
  Next t
End Sub
Danke für die schnelle Antwort. :19:
Habe das ganze jetzt mal auf meine Tabelle angepasst...und es funktioniert


Code:
Public Sub bedingte_Zeilenlleerung()
 '** Ermittlung der letzten Zeile in Spalte F
 lz = Cells(Rows.Count, 6).End(xlUp).Rows.Row  'dto. Spalte
 rcol = Cells(13, Columns.Count).End(xlToRight).Column
 '** Durchlauf aller Zeilen
 For t = lz To 2 Step -1 'Zählung rückwärts bis Zeile 2
    'Abfragen, ob in der vierten Spalte der Buchstabe Wert aus B3 steht
    If Cells(t, 6).Value = Cells(3, 2) Then
       Range(Cells(t + 14, 7), Cells(t + 1, rcol)).ClearContents
    End If
 Next t
End Sub


Jetzt fehlt mir quasi, dass anstatt alle Zeilen zu leeren, quasi immer eine Zeile erhalten bleibt und erst die nächsten beiden  geleert werden.
Wenn ich es manuell eingebe
Code:
Range(Cells(t + 14, 7).ClearContents
Range(Cells(t + 16, 7).ClearContents
Range(Cells(t + 17, 7).ClearContents
Range(Cells(t + 19, 7).ClearContents
Range(Cells(t + 20, 7).ClearContents

läuft das ganze nicht auch wenn ich Range weglasse und nur Cells nutze :20:
Moin,
wenn du nur 1 Zelle in der nächsten zeile löschen willst, dann reicht Cells(x, y).ClearContents. Ich hatte das so verstanden, dass da noch einige Spalten folgen, die auch geleert werden sollen

Die andere Frage 
Zitat:Jetzt fehlt mir quasi, dass anstatt alle Zeilen zu leeren, quasi immer eine Zeile erhalten bleibt und erst die nächsten beiden  geleert werden.

habe ich trotz des Beispiels nicht verstanden/nachvollziehen können.
Servus,

ich möchte, dass Zeile 15 erhalten bleibt,

Zeile 16 und 17 sollen geleert werden.

Zeile 18 soll erhalten bleiben.

Zeile 19 und 20 sollen geleert werden.


Dieses Vorgehen soll dynamisch fortgeführt werden bis zur letzten beschrifteten Zeile.

Vielleicht versteht man es so besser.

Danke für die Hilfe!
OK, das habe ich jetzt verstanden.
Und wenn in Zeile_14 und Zeile_15 das gesuchte Datum steht ... ?
Im Prinzip so:
Code:
Range(Cells(t + 1, 7), Cells(t+2, 7)).ClearContents
Ich hatte einen Denkfehler. Entschuldigung

Im Prinzip prüfe ich nur in einer festen Zeile (Zeile 13) das Datum. Das habe ich auch im Code falsch.

Datum in Zeile 13 von Spalte F an soll mit Datum aus Zelle B3 verglichen werden.

Es ist also garnicht nötig alle Zeilen danach abzusuchen, sondern nur diese eine.

Stimmt das Datum in einer Zelle der Zeile mit dem aus B3 überein, sollen ab dort die Spalten meiner gewünschten Zeilen nacht rechts geleert werden.



Grüße und Danke für die Hilfe!
Sorry für den Doublepost


Code:
Public Sub bedingte_Zeilenlleerung()

 lz = Cells(Rows.Count, 6).End(xlUp).Rows.Row  'dto. Spalte
 rcol = Cells(13, Columns.Count).End(xlToRight).Column

 For t = lz To 13 Step -1  'Zählung rückwärts der Zeile 13
    'Abfragen, ob in der vierten Spalte der Buchstabe Wert aus B3 steht
    If Cells(t, 6).Value = Cells(3, 2) Then
     
'Range(Cells(t + 14, 7), Cells(t + 1, rcol)).ClearContents
       
       Range(Cells(t + 1, 7), Cells(t + 1, rcol)).ClearContents
       Range(Cells(t + 3, 7), Cells(t + 3, rcol)).ClearContents
       Range(Cells(t + 4, 7), Cells(t + 4, rcol)).ClearContents
       Range(Cells(t + 6, 7), Cells(t + 6, rcol)).ClearContents
    End If
 Next t
End Sub


Es wird nur die Spalte 6 auf das Datum geprüft wird, es sollen aber alle Spalten ab dieser Spalte geprüft werden.

Mit zwei Variablen klappt es bei mir nicht.

Grüße