Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kalenderwochen vergleichen

Kalenderwochen vergleichen
01.06.2006 17:32:22
Christian
Hallo,
habe jetzt das halbe Forumsarchiv durchwühlt und trotzdem keine Lösung gefunden:
In Spalte 26 steht ein Datum (z.B. 10.05.06). Die dazugehörige Kalenderwoche soll mit der aktuellen KW verglichen werden, und wenn sie 2 oder mehr KW zurückliegt, soll der zugehörige Wert in Spalte 1 gelöscht werden.
Mein Code sieht wie folgt aus:
ls = Cells(Rows.Count, 1).End(xlUp).Row
For i = ls To 5 Step -1
If KWoche(Date) - 1 > KWoche(Cells(i, 26)) Then
Cells(i, 1).Delete
End If
Next i
Für die KW benutze ich die bewährte Funktion

Function KWoche(d As Date)
Dim t As Long
d = Date
t = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 1)
KWoche = ((d - t - 3 + (Weekday(t) + 1) Mod 7)) \ 7 + 1
End Function

Beim Ausführen kommt zwar keine Fehlermeldung, es passiert aber auch sonst nichts. Wenn ich einen Haltepunkt setze, kann man sehen, dass die Variablen ls, i, Date und der Zellinhalt von Cells(i, 26) richtig erkannt werden.
Kann mir jemand sagen, wo der Fehler liegt?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalenderwochen vergleichen
01.06.2006 17:53:07
Luschi
Hallo Christian,
Zellinhalte löscht man mit:
.ClearContens (nur Formeln/Werte - Formatierung bleibt erhalten) oder
.Clear (Formeln/Werte und Formatierungen werden gelöscht)
Gruß von Luschi
aus klein-Paris
AW: Kalenderwochen vergleichen
02.06.2006 10:30:47
Christian
Hallo, Luschi,
vielen Dank für den Hinweis, der natürlich grundsätzlich richtig ist.
Der geänderte Code sieht jetzt so aus:
ls = Cells(Rows.Count, 1).End(xlUp).Row
For i = ls To 5 Step -1
If KWoche(Date) - 1 &gt KWoche(Cells(i, 26)) Then
Cells(i, 1).ClearContents
End If
Next i
Leider funktioniert's immer noch nicht.
AW: Kalenderwochen vergleichen
02.06.2006 13:05:12
Luschi
Hallo Christian,
vielleicht liegt es daran, daß Cells auf die falsche Tabelle zugreift.
Sieh Dir mal meine Anmerkungen zu folgendem Thread an:
https://www.herber.de/forum/messages/769043.html
Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("meineTabelle") With ws ls = .Cells(.Rows.Count, 1).End(xlUp).Row For i = ls To 5 Step -1 If KWoche(Date) - 1 > KWoche(.Cells(i, 26)) Then .Cells(i, 1).ClearContents End If Next i End With Set ws = Nothing Gruß von Luschi
aus klein-Paris
Anzeige
AW: Kalenderwochen vergleichen
02.06.2006 16:12:53
Christian
Hallo, Luschi,
da ich nur ein Tabellenblatt habe und nur eine Datei geöffnet ist, kann's daran nicht liegen. Habe aber festgestellt, dass der Code
KWoche(Cells (i, 26))
den Wert 22, also die aktuelle KW wiedergibt, obwohl in der Zelle als Datum der 10.05.2006 steht. Selbst
KWoche("10.05.2006")
gibt 22 als Wert zurück, obwohl es lt. Kalender ja die 19 sein müsste.
Noch eine Idee?
AW: Kalenderwochen vergleichen
02.06.2006 18:36:27
Luschi
Hallo Christian,
gemäß http://www.excelformeln.de/formeln.html?welcher=7 wird die Kalenderwoche so berechnet:
=KÜRZEN((A1-DATUM(JAHR(A1+3-REST(A1-2;7));1;REST(A1-2;7)-9))/7)
Und da kommt für den "10.05.2006" auch 19. KW heraus.
Im Vba-Code sieht das so aus, wenn das Datum in A1 steht:
=TRUNC((A1-DATE(YEAR(A1+3-MOD(A1-2,7)),1,MOD(A1-2,7)-9))/7)
Und die Formeln auf der o.g. Seite sind echt Spitze!
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Kalenderwochen vergleichen
03.06.2006 19:39:26
Christian
Hallo, Luschi,
die Formel könnte ich in eine Hilfsspalte einfügen und runter kopieren bis zur letzten Zeile, um die Werte dort mit der aktuellen KW vergleichen zu lassen. Als Hilfslösung sicherlich möglich, dafür schon mal vielen Dank, aber eigentlich soll der Vergleich ja direkt in der VBA-Schleife stattfinden.
Gruß Christian
AW: Kalenderwochen vergleichen
04.06.2006 10:32:42
Luschi
Hallo Andreas,
ich habe mir die Formel aus Deiner 1. Anfrage noch mal angeschaut und getestet. Sie stimmt mit der Vba-Lösung von http://www.schmittis-page.de/index.html?/excel/vba/t22.htm
überein und liefert die richtigen Werte (auch für den 10.05.2006).
Ich habe die Klammersetzung etwas verändert, um die Rechenregeln etwas klarer zu strukturieren:
t = DateSerial(Year(d + ((8 - Weekday(d)) Mod 7) - 3), 1, 1)
KWoche = ((d - t - 3 + (Weekday(t) + 1) Mod 7) \ 7) + 1
Wenn's dann immer noch nicht hinhaut, werden die Daten vielleicht doch nicht aus den richtigen Zellen gelsesen. Baue doch mal 'ne MsgBox zum Anzeigen der Zwischenresultate (Tabellenname, Adresse und Wert) ein.
ls = Cells(Rows.Count, 1).End(xlUp).Row
For i = ls To 5 Step -1
MsgBox Cells(i, 26).Parent.name & vbCrLf & Cells(i, 26).Address & _
vbCrLf & Cstr(Cells(i, 26).value
If KWoche(Date) - 1 &gt KWoche(Cells(i, 26)) Then
Cells(i, 1).Delete
End If
Next i
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Kalenderwochen vergleichen
07.06.2006 09:54:20
Christian
Hallo, Luschi,
die neue Klammersetzung hat bei mir nichts bewirkt.
Da wie bereits erwähnt auch eine direkte Datumsabfrage (KWoche("10.05.2006")) ohne den Umweg über einen Zellbezug zu einem falschen Ergebnis führt, habe ich mich jetzt für die o.g. Hilfslösung entschieden.
Vielen Dank nochmal für Deine Tipps.
Gruß Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige