Funktion für Kalenderwoche übernimmt zusätzlich ältere Jahre , nur aktuelles Jahr gefragt

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von dani02.

    Funktion für Kalenderwoche übernimmt zusätzlich ältere Jahre , nur aktuelles Jahr gefragt

    Hallo Leute,

    ich habe mir eine Code geschrieben, welcher mir ein Zeilendatum in eine KW Woche umrechnet und diesen mit der aktuellen KW vergleichen soll.
    Das ganze funktioniert blendet bis auf das, dass er mir auch die KW von Jahren zuvor mitberücksichtigt und somit auch mit kopiert.

    Ich sehe im Code der Funktion nicht woran das liegt, hoffe Ihr habt ein Tipp.

    Hier das Hauptprogram:

    Quellcode

    1. 'Hauptprogramm sucht jeweilige Zellreihen aus
    2. For i = 13 To 1044
    3. 'ws_anfang.Cells(i, 19).value muss an funktion zum umwandeln gegeben werden
    4. If IsDate(ws_anfang.Cells(i, 19).value) = True Then
    5. If KalenderwocheNachDin(ws_anfang.Cells(i, 19).value) = KalenderwocheNachDin(Date) Then
    6. ws_anfang.Rows(i).Copy ws_ziel.Rows(z)
    7. z = z + 1
    8. End If
    9. End If
    10. Next i


    Hier die Funktion an die übergeben wird und auch die aktuelle KW Woche übernommen wird:

    Quellcode

    1. Function KalenderwocheNachDin(dat As Date) As Integer
    2. Dim a As Integer
    3. a = Int((dat - DateSerial(Year(dat), 1, 1) + ((Weekday(DateSerial(Year(dat), 1, 1)) + 1) Mod 7) - 3) / 7) + 1
    4. If a = 0 Then
    5. a = KalenderwocheNachDin(DateSerial(Year(dat) - 1, 12, 31))
    6. ElseIf a = 53 And (Weekday(DateSerial(Year(dat), 12, 31)) - 1) Mod 7 <= 3 Then
    7. a = 1
    8. End If
    9. KalenderwocheNachDin = a
    10. End Function


    Danke euch im Voraus! ?(
    Du müsstest bei deiner Prüfung das Aktuelle Jahr mit berücksichtigen. Das Datum hast du ja mit .year kannst du die Jahreskomponente abfragen. Diese Vergleichst du mit >= date.now.year und schon hast du nur noch das Akutelle Jahr und zukünftige Jahre.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    dani02 schrieb:

    ich habe mir eine Code geschrieben, welcher mir ein Zeilendatum in eine KW Woche umrechnet
    Falls du sie selbst geschrieben hast, hast du wenigstens was dabei gelernt.
    Ich hätte mir die Mühe nicht gemacht, sondern hätte die VBA-interne Funktion verwendet:

    Visual Basic-Quellcode

    1. Function WeekNr(ByVal Datum As Date) As Integer
    2. WeekNr = CInt(Format(Datum, "ww", , vbFirstFourDays))
    3. End Function

    dani02 schrieb:

    dass er mir auch die KW von Jahren zuvor mitberücksichtigt

    Meinst du damit, dass er am 1.1.2016 die KW52 zurück gibt?
    Was soll er denn statt dessen machen?
    Wenn du das nicht willst, musst du abprüfen, ob der Monat=1 und die Woche >50 ist und dann die entsprechende Massnahme einleiten.
    Am Jahresende kann es übrigens ähnliche Effekte geben (31.12.2013=Woche1)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()

    @Schamash

    Sorry wenn ich so blöd Frage, aber bei welcher Prüfung genau? :D
    Mein Kopf schaltet schon so langsam aus für das Wochenende :D

    @petaod

    ich probiere mal die short Version mal aus oder das nächste mal ..

    Nein ich meinte damit, dass er mir die Zellen auch mit der richtigen Kalenderwoche vom letzten Jahr rauskopiert.
    z.B. will ich nur diese KW rauskopieren 04.-08. was er auch macht ,aber er kopiert auch gleichzeitig die Zellen vom letzten Jahr mit der KW raus.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dani02“ ()

    dani02 schrieb:

    If KalenderwocheNachDin(ws_anfang.Cells(i, 19).value) = KalenderwocheNachDin(Date) Then


    Hier das Jahr prüfen
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    dani02 schrieb:

    dass er mir auch die KW von Jahren zuvor mitberücksichtigt

    Visual Basic-Quellcode

    1. CellValue = ws_anfang.Cells(i, 19).Value
    2. If IsDate(CellValue) Then
    3. If Year(CellValue) = Year(Date) And WeekNr(CellValue)=WeekNr(Date) Then
    4. 'copy
    5. End If
    6. End If
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --