Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Löschen von Zeilen

Forumthread: Löschen von Zeilen

Löschen von Zeilen
29.04.2025 15:03:33
NicoHendrik
Hallo alle zusammen,

Wenn die Zelle C8 leer ist soll der Inhalt von Zellen K8 bis NL8 gelöscht werden.

Wenn die Zelle C57 leer ist soll der Inhalt von Zellen K57 bis NL57 gelöscht werden.

Dies soll von C8 bis C57 gelten.

Kann mir bitte jemand dabei helfen?

Gruß Nico

https://www.herber.de/bbs/user/177294.xlsm
Anzeige

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen von Zeilen
29.04.2025 15:30:31
velo
Hallo,

kann deine Datei aufgrund der Firmen-Firewall leider nicht aufmachen.

So in etwas?
Option Explicit


Sub d()
Dim ws As Worksheet
Dim i As Integer

Set ws = ThisWorkbook.Worksheets("Tabelle1")

For i = 8 To 57
If ws.Cells(i, 3).Value = "" Then
ws.Range("K" & i & ":NL" & i).ClearContents
End If
Next i

End Sub

Oder willst du das ganze mit Events machen?

VG
velo
Anzeige
AW: Löschen von Zeilen
29.04.2025 18:56:47
Piet
Hallo

bitte probiere mal diesen Code aus, der könnte deine Aufgabe erfüllen. Ich habe mir dazu die anderen Lösungen angesehen.

@Alexandra Dein Code löscht, wie ich das sehe, den gesamten Bereich! Da gehen aber bereits eingetragene Urlaubstage verloren!
@Daniel Dein Code ist sehr schnell, löscht alle Leerzeilen, zerreisst aber die Tabelle, weil viele Leerzeilen zwischen den Daten stehen.

Mein Code kopiert Rückwärts die eingetragenen unteren Daten nach oben, lässt aber die Formeln unberührt.
Im Beispiel steht "Peter" mit SEINEN Urlaubstagen ganz oben. Ich nehme seine Urlaubstage mit nach oben!
Ich hoffe ich habe damit die Aufgabenstellung richtig verstanden. Wir werden sehen??

mfg Piet

Sub Zeilen_löschen_RW()

Dim j As Integer
Application.ScreenUpdating = False
'Leerzeilen löschen, nach oben kopieren!
For j = 57 To 8 Step -1
If Cells(j, 3).Value = Empty Then
Cells(j + 1, 11).Resize(58 - j, 366).Copy
Cells(j, 11).PasteSpecial xlPasteValues
Cells(j + 1, 3).Resize(58 - j, 2).Copy
Cells(j, 3).PasteSpecial xlPasteValues
End If
Next j
MsgBox "Fertig"
End Sub
Anzeige
AW: Löschen von Zeilen
29.04.2025 21:01:16
NicoHendrik
Hallo Piet, dein Code funktioniert prima.

Danke Nico
AW: Löschen von Zeilen
29.04.2025 22:44:10
daniel
@Daniel Dein Code ist sehr schnell, löscht alle Leerzeilen, zerreisst aber die Tabelle, weil viele Leerzeilen zwischen den Daten stehen.

das müsstest du mir erklären.
Mein Code zerreißt da nichts.
Er lässt die Daten dort, wo sie sind.
Eine Neuanordnung der Daten war nicht gefragt.
Da wäre die Frage, ob man sowas nicht einfacher über Sortieren macht.
Anzeige
AW: @Daniel Sorry, 'zerreißen' war schlecht ausgedrückt oWt
30.04.2025 00:39:03
Piet
...
AW: Löschen von Zeilen
29.04.2025 15:51:50
daniel
Hi
wenn bei deinem ClearAll nur die gelöscht werden sollen, die in Spalte C keinen Eintrag haben, dann so:

Sub ClearAll2()

With Range("C8:C57")
If WorksheetFunction.CountBlank(.Cells) > 0 Then Intersect(.SpecialCells(xlCellTypeBlanks).EntireRow, Range("K:NL")).ClearContents
End With
End Sub


Gruß Daniel
Anzeige
AW: Löschen von Zeilen
29.04.2025 19:06:26
Piet
Nachtrag

ich sehe gerade den Code des Kollegen GerdL und habe in meinem etwas vergessen. Bitte noch einfügen.
Application.EnableEvents = False - gehört VOR For Next --> Application.EnableEvents = True bitte NACH Next

mfg Piet
AW: Danke für die Rückmeldung oWt
01.05.2025 13:35:48
Piet
...
AW: Danke für die Rückmeldung oWt
01.05.2025 13:43:33
NicoHendrik
Hallo Piet, Daniel,

ich hab leider noch eine Sache:

ich möchte gerne die leeren Zellen zählen um zu sehen wieviel Tage im Jahr gearbeitet wurde.

Jetzt zähle ich sie ohne das ich die freie Tage und die Feiertage zu berücksichtigen. (Tage Arbeiten)

wie bekomme ich das hin?

Gruß Nico

https://www.herber.de/bbs/user/177302.xlsm
Anzeige
AW: Danke für die Rückmeldung oWt
01.05.2025 13:45:17
NicoHendrik
Vergessen, die Feiertage befinden sich von AU63 bis AU77 (ausgeblendet)
AW: Danke für die Rückmeldung oWt
02.05.2025 17:50:31
Piet
Hallo Nico

zu deiner Frage fällt mir spontan keine Lösung ein, ich sehe aber deine Formel in Spalte G "Tage".
Mein Tipp, bei Leerzellen zählst du ALLE Leerzellen, d.h., auch alle Samstage, Sonntage, Feiertage!
Du ziehst aber schon Summen für "Eltern, Krank, Frei". Dazu fällt mir spontan eine Lösung ein.

Was ist, wenn du von den Tagen die max. gearbeitet werden können die Summen abziehst?
z.B. 365 Tage - 104 Samstage, Sonntage = 261 - Feiertage (wenn es KEIN Samstag, Sonntag ist)
Wäre das eine alternative, mit der du leben kannst?? Eine andere Idee dazu habe ich leider nicht.

mfg Piet
Anzeige
AW: Danke für die Rückmeldung oWt
02.05.2025 17:56:39
Piet
Nachtrag

altertnativ könntest du auch in den -ausgeblendeten Zeilen- für jeden Monat die max. Arbeitstag ausrechnen, und per Formel diesen Wert für jeden neuen Monat als max Wert der möglichen Arbeitstage vorgeben. Ist ein bisschen manuelle Rechenarbeit, dürfte sich aber lohnen.

mfg Piet
Anzeige
AW: Danke für die Rückmeldung oWt
02.05.2025 18:01:57
NicoHendrik
Danke Piet, ich werde das jetzt anders mit eure Hilfe anders lösen. Werde noch Heute eine neuen Fall aufmachen wo ich Hilfe nötig hab.


Gru Nico
AW: Löschen von Zeilen
29.04.2025 21:04:08
NicoHendrik
Hallo Piet,

in afrikaans sagen wir baie danke.

klappt jetzt bestens
AW: Löschen von Zeilen
30.04.2025 08:21:58
NicoHendrik
Hallo Piet, ich hab dein Code heute Nacht ausführlich getestet und bin wirklich begeistert.

Um es schneller zu machen hab ich nur vor und nach dein Code was eingefügt. Es funktioniert.

Sub Zeilen_löschen_RW()

'Berechnung schneller machen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With

Dim j As Integer
Application.ScreenUpdating = False
'Leerzeilen löschen, nach oben kopieren!
For j = 57 To 8 Step -1
If Cells(j, 3).Value = Empty Then
Cells(j + 1, 11).Resize(58 - j, 366).Copy
Cells(j, 11).PasteSpecial xlPasteValues
Cells(j + 1, 3).Resize(58 - j, 2).Copy
Cells(j, 3).PasteSpecial xlPasteValues
End If
Application.EnableEvents = False
Next j
Application.EnableEvents = True

'Berechnung schneller machen ruecksetzen
Application.EnableEvents = True
With Application
.ScreenUpdating = True
.Calculation = xlAutomatic
.EnableEvents = True
End With

Range("K8").Select
Anzeige
AW: Löschen von Zeilen
30.04.2025 14:15:52
daniel
Hi
dann probier mal dass.
hier werden Daten mit Inhalt durch Sortieren zusammen geschoben.

Sub ClearEmpty()

Application.EnableEvents = False
With Range("C8:NL57")
If WorksheetFunction.CountBlank(.Columns(1)) > 0 Then
Intersect(.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow, Range("K:NL")).ClearContents
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
End If
End With
Application.EnableEvents = True
End Sub


Gruß Daniel
Anzeige
AW: Löschen von Zeilen
30.04.2025 15:25:09
NicoHendrik
Danke Daniel,
wenn ich morgen früh wieder Zuhause bin probiere ich es mal. Der Code mit meine Anpassung von Piet funktioniert ansonnst sehr gut.

Gruß Nico
AW: Löschen von Zeilen
01.05.2025 06:21:54
NicoHendrik
Guten Morgen Daniel & Piet,

beide Codes funktionieren sehr gut. Der einstige Vorteil von Daniels Code ist, dass er die Namen alphabetisch sortiert. Ob das seien muss soll meine Enkelin, die Schichtleiterin in eine große Nahrungsmittel Fabrik ist, wo Sie noch immer mit Urlaubsplaner und Füllstift arbeiten endscheiden.

Vielen Dank und schönen 1. Mai

Grüße aus den hohen Norden
Nico
Anzeige
AW: Löschen von Zeilen
30.04.2025 17:27:02
Piet
Hallo Nico

es freut mich sehr das mein Code gut funktioniert. Du solltest etwas wissen, was nur Kollegen wissen.
Daniel und viele andere Kollegen sind -um Klassen besser- als ich! Ich weiß das, stört mich aber nicht!
Wenn der Code von Daniel optimaler ist dann nimm ihn ruhig. Ich habe NIE etwas gegen -bessere Codes-!

Als 74 jähriger freue ich mich aber seit vielen Jahren ein guter Ratgeber im Forum zu sein, denn ich falle immer wieder durch Ideen Reichtum auf.
Mich freut sehr das ich deine Aufgabe richtig verstanden habe, und nimm bitte problemlos den für dich besten Code. Viele Grüsse aus Izmir/TR.

mfg Piet
Anzeige
AW: Löschen von Zeilen
01.05.2025 06:23:52
NicoHendrik
Guten Morgen Piet & Daniel,

beide Codes funktionieren sehr gut. Der einstige Vorteil von Daniels Code ist, dass er die Namen alphabetisch sortiert. Ob das seien muss soll meine Enkelin, die Schichtleiterin in eine große Nahrungsmittel Fabrik ist, wo Sie noch immer mit Urlaubsplaner und Füllstift arbeiten endscheiden.

Vielen Dank und schönen 1. Mai

Grüße aus den hohen Norden
Nico
Anzeige
AW: Löschen von Zeilen
29.04.2025 16:15:13
NicoHendrik
Hallo alle zusammen,

Leider funktionieren die Lösungen bis jetzt nicht.

Eine Verbesserung der Anfrage:

Wenn die Zelle C8 leer ist soll der Inhalt von Zellen K8 bis NL8 gelöscht werden.
"""
Wenn die Zelle C29 leer ist soll der Inhalt von Zellen K29 bis NL29 gelöscht werden.
"""
Wenn die Zelle C57 leer ist soll der Inhalt von Zellen K57 bis NL57 gelöscht werden.

Dies soll von den Zellen C8 bis C57 gelten.

Kann mir bitte jemand dabei helfen?

Gruß Nico
Anzeige
AW: Löschen von Zeilen
29.04.2025 16:19:39
cysu11
Hallo Nico,

ich habe doch die Datei hochgeladen, da funktioniert der Code ohne Probleme! :)

Hast du das evtl. in einer anderen Mappe kopiert, etc.? Schreibschutz etc.?

Die Aussage "funktionieren bis jetzt nicht", was genau funktioniert nicht, gibt es eine Fehlermeldung?

LG, Alexandra
Anzeige
AW: Löschen von Zeilen
29.04.2025 18:54:45
GerdL
Moin Nico,

ins Modul der Tabelle kopieren u. testen:
Private Sub Worksheet_Change(ByVal Target As Range)


Dim Cel As Range

On Error GoTo fin
If Not Intersect(Target, Range("K8:NL57")) Is Nothing Then
For Each Cel In Intersect(Target, Range("K8:NL57"))
If Cel > "" And Cells(Cel.Row, 3) = "" Then
Application.EnableEvents = False
Application.Undo
End If
Next
End If
If Not Intersect(Target, Range("C8:CL57")) Is Nothing Then
For Each Cel In Intersect(Target, Range("C8:C57"))
If Cel = "" Then
Application.EnableEvents = False
Range("K" & Cel.Row & "NL" & Cel.Row).ClearContents
End If
Next
End If

fin:
Application.EnableEvents = True

End Sub

Gruß Gerd
Anzeige
AW: Löschen von Zeilen
29.04.2025 20:07:09
NicoHendrik
Hallo Gerd,
Fehlermeldung:

Fehler bei,m Kompilieren

Mehrdeutiger Name erkannt:
Worksheet_Change
AW: Löschen von Zeilen
29.04.2025 20:22:59
daniel
HI
es darf immer nur ein Makro geleichen Namens geben.
du kannst keine zwei Change-Eventmakros gleichzeitig haben.
du darfst also das neue nicht einfach dazu kopieren.
du musst prüfen, ob in dem neuen Makro, dass du bekommen hast die alten funktionalitäten schon drin sind.
wenn ja, musst du das alte vorher löschen, wenn nein musst du die neuen funktionalitäten in das bestehende Makro übernehmen.

Gruß Daniel
Anzeige
AW: Löschen von Zeilen
29.04.2025 20:57:00
NicoHendrik
Danke, das war es. Ich hab es jetzt hinbekommen.

Vielen dank an alle mir geholfen haben.
Wenn ich nicht sofort geantwortet hab, sorry, es gab aber viele Probleme hier die erst gelöste werden müssen.

Gruß Nico
AW: Löschen von Zeilen
29.04.2025 16:34:00
daniel
Hi Nico
das Prinzip ist schon klar.
Leider beantwortest du immer noch nicht, wann genau dieses Löschen passieren soll:
- automatisch, wenn der Anwender die Spalte C bearbeitet
- Bei Anforderung durch Klick auf einen Button

auch das "Funktioniert nicht" ist jetzt nicht besonders aussagekräftig, du solltest genauer beschreiben, wie sich das äußert.
Wir wissen ebenfalls nicht, wie du unsere Vorschläge umgesetzt hast.
Am besten ist, du lädst die Datei mit deinen Lösungsversuchen nochmal hoch, dann können wir besser schauen, warum es nicht funktionert.

Gruß Daniel
Anzeige
AW: Löschen von Zeilen
29.04.2025 20:00:29
NicoHendrik
Der Code soll ausgefürt werden wenn der Teilnemer aus Spalte c gelösch wird
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18