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

Ungerade KW löschen

Forumthread: Ungerade KW löschen

Ungerade KW löschen
25.06.2025 10:12:18
Chris
Hallo Forum,

das folgende Makro listet in Spalte D alle Datumsangaben zwischen Start- und Enddatum auf.
In Spalte E wird die entsprechende KW angezeigt.

Ich möchte jede Zeile mit einer ungerade KW-Angabe daraufhin löschen, so dass nur die Datumsangaben der
geraden KW erhalten bleiben.

Dies funktioniert nicht, da nach dem Löschen auch teilwweise gerade KWs erhalten bleiben.

Wo liegt der Fehler?
Chris




Sub KW()

With Sheets("test")

For d = .Range("A1").Value To .Range("A2").Value
kalenderwoche = DatePart("ww", d, vbMonday, vbFirstFourDays)

.Cells(Zeile, 4).Value = Format(d, "0")
.Cells(Zeile, 5).Value = Format(kalenderwoche, "0")
Zeile = Zeile + 1

Next
End With

'ungerade Zellen löschen
Set Rng = Sheets("Test").Range("E3:E40")

If Not Rng Is Nothing Then
For Each cell In Rng
If IsNumeric(cell.Value) Then

If cell.Value Mod 2 > 0 Then
'cell.ClearContents '
cell.EntireRow.Delete
End If
End If
Next cell
End If
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ungerade KW löschen
25.06.2025 10:25:21
velo
Hi,

bei so Zeilen-Lösch-Geschichten musst du immer von unten nach oben arbeiten.

Sprich ...
    Set rng = Sheets("Test").Range("E3:E40")


If Not rng Is Nothing Then
For Each cell In rng
If IsNumeric(cell.Value) Then

If cell.Value Mod 2 > 0 Then
'cell.ClearContents '
cell.EntireRow.Delete
End If
End If
Next cell
End If

muss zu...
    Dim i As Long

If Not rng Is Nothing Then
For i = rng.Row + rng.Rows.Count - 1 To rng.Row Step -1
If IsNumeric(Worksheets("test").cells(i, hier die Spalte).Value) Then
If Worksheets("test").cells(i, hier die Spalte).Value Mod 2 > 0 Then
'cell.ClearContents '
Worksheets("test").Rows(i).Delete
End If
End If
Next i
End If

VG
velo
Anzeige
AW: Ungerade KW löschen
25.06.2025 11:00:01
daniel
Hi

schreibe doch nur die geraden Kalenderwochen und lass die ungeraden weg.
excel hat zwei funktionen, um gerade oder ungerade zu ermitteln.
For d = .Range("A1").Value To .Range("A2").Value

kalenderwoche = DatePart("ww", d, vbMonday, vbFirstFourDays)
if worksheetfunction.IsEven(kalenderwoche) then
.Cells(Zeile, 4).Value = Format(d, "0")
.Cells(Zeile, 5).Value = Format(kalenderwoche, "0")
Zeile = Zeile + 1
end if
Next


Gruß Daniel

Anzeige
AW: Ungerade KW löschen
25.06.2025 10:48:46
Chris
Hallo velo,

ok, danke für deine Antwort - es läuft jetzt.
Eine Frage noch:

Die Zeile

For i = Rng.Row + Rng.Rows.Count - 1 To Rng.Row Step -1

Was genau macht rng.row + rng.rows.count - 1, angenommen der Bereich mit Werten beginnt bei E3 und hört bei E40 auf.

Gruß
Chris
Anzeige
AW: Ungerade KW löschen
25.06.2025 12:00:18
Yal
Moin,

es ist aberwitzig, den Umweg über Rng.Row + Rng.Rows.Count -1 zu gehen, wenn gerade 2 Zeile davor auf dem Zeilenbereich auf 3 bis 40 festverdrahtet ist.

Schlanker Vorschlag:
For i = 40 To 3 Step -1

With Worksheets("test").Cells(i, "E")
If WorksheetFunction.IsEven(DatePart("ww", .Value, vbMonday, vbFirstFourDays)) Then .EntireRow.Delete
End With
Next


VG
Yal
Anzeige
AW: Ungerade KW löschen
25.06.2025 13:18:24
velo
Hi Yal,

natürlich geht das auch, aber wenn man dann den Bereich anpasst muss man auch jedes mal den Loop ändern.
Folglich kann man den Loop dann auch vergessen, wenn man den Bereich mal dynamisch ermittelt.

Ich weiß ja nicht was Chris noch in Zukunft mit dem Code vor hat und wie sich der verändern soll, ich habe ihm einfach mal eine allgemeinere Lösung gegeben.

VG
velo
Anzeige
AW: Ungerade KW löschen
25.06.2025 13:10:18
velo
Hi Chris,

Was genau macht rng.row + rng.rows.count - 1, angenommen der Bereich mit Werten beginnt bei E3 und hört bei E40 auf.

Nehmen wir mal E3:E40 an, dann ist rng.row = 3; rng.rows.count = 38 (also Anzahl der Zeilen in der Range). So kommt man auf 3+ 38 -1 = 40.
Ist im Prinzip also nur eine Schreibweise um die letzte Zeile einer Range auszuwerten.

VG
velo
Anzeige
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