Excel VBA gibt nicht die korrekte Kalenderwoche zurück?

2 Antworten

Hmm, ich kann das Problem nicht nachvollziehen. Bei mir rechnet deine Funktion richtig. Das einzige, was mir aufgefallen ist, ist dass von K bis BI nur 51 Spalten sind und ein Jahr in der Regel 52 KWs hat. Vielleicht kannst du da mal schauen, ob du links oder rechts eine Spalte zu wenig erwischt hast.

Ich würde Berechnungen, die nicht zwingend in VBA erfolgen müssen, aber immer als Excel-Formeln hinterlegen. Das hat (falls das hier die einzige VBA-Funktion ist) den Vorteil, dass du die Excel ohne Makros speichern kannst und dadurch z.B. keine Probleme kriegst, wenn du die Datei per Mail verschicken willst.

Dein Beispiel als Excel-Formel würde so aussehen (für Zeile 2):

=TEXTVERKETTEN(", "; WAHR; FILTER("KW " & SPALTE(K2:BI2)-10;K2:BI2=1))

Annette0806 
Beitragsersteller
 04.04.2025, 09:57

Das war auch tatsächlich meine erste Idee, dies über eine Funktion zu regeln. Bei deiner Funktion sagt Excel mir, dass die Funktion FILTEr ungültig sei. Ich habe Excel 2016. Kannst du mir da weiterhelfen? Vielen Dank aber schonmal. Herzliche Grüße Annette

daCypher  04.04.2025, 10:13
@Annette0806

Ja, die Funktion FILTER gibt es glaub ich seit Excel 2019. Da sind auch die ganz praktischen dynamischen Arrays hinzugekommen. Ich hab leider kein Excel 2016 da, um mit alternativen Formeln zu experimentieren. Falls es die Funktion TEXTVERKETTEN in Excel 2016 gibt, müsste es hiermit funktionieren:

=TEXTVERKETTEN(", ";WAHR; WENN(K2=1; "KW 1"; ""); WENN(L2=1; "KW 2"; ""); WENN(M2=1; "KW 3"; ""); WENN(N2=1; "KW 4"; ""); WENN(O2=1; "KW 5"; ""); WENN(P2=1; "KW 6"; ""); WENN(Q2=1; "KW 7"; ""); WENN(R2=1; "KW 8"; ""); WENN(S2=1; "KW 9"; ""); WENN(T2=1; "KW 10"; ""); WENN(U2=1; "KW 11"; ""); WENN(V2=1; "KW 12"; ""); WENN(W2=1; "KW 13"; ""); WENN(X2=1; "KW 14"; ""); WENN(Y2=1; "KW 15"; ""); WENN(Z2=1; "KW 16"; ""); WENN(AA2=1; "KW 17"; ""); WENN(AB2=1; "KW 18"; ""); WENN(AC2=1; "KW 19"; ""); WENN(AD2=1; "KW 20"; ""); WENN(AE2=1; "KW 21"; ""); WENN(AF2=1; "KW 22"; ""); WENN(AG2=1; "KW 23"; ""); WENN(AH2=1; "KW 24"; ""); WENN(AI2=1; "KW 25"; ""); WENN(AJ2=1; "KW 26"; ""); WENN(AK2=1; "KW 27"; ""); WENN(AL2=1; "KW 28"; ""); WENN(AM2=1; "KW 29"; ""); WENN(AN2=1; "KW 30"; ""); WENN(AO2=1; "KW 31"; ""); WENN(AP2=1; "KW 32"; ""); WENN(AQ2=1; "KW 33"; ""); WENN(AR2=1; "KW 34"; ""); WENN(AS2=1; "KW 35"; ""); WENN(AT2=1; "KW 36"; ""); WENN(AU2=1; "KW 37"; ""); WENN(AV2=1; "KW 38"; ""); WENN(AW2=1; "KW 39"; ""); WENN(AX2=1; "KW 40"; ""); WENN(AY2=1; "KW 41"; ""); WENN(AZ2=1; "KW 42"; ""); WENN(BA2=1; "KW 43"; ""); WENN(BB2=1; "KW 44"; ""); WENN(BC2=1; "KW 45"; ""); WENN(BD2=1; "KW 46"; ""); WENN(BE2=1; "KW 47"; ""); WENN(BF2=1; "KW 48"; ""); WENN(BG2=1; "KW 49"; ""); WENN(BH2=1; "KW 50"; ""); WENN(BI2=1; "KW 51"; ""))
Annette0806 
Beitragsersteller
 04.04.2025, 14:02
@daCypher

Hallo daCypher, es war tatächlich ein Fehler in den KWs, du hattest festgestellt, dass es nur 51 Zellen sind. Tja, da hatte die Kollegin glatt KW14 vergessen. Jetzt funktioniert es aber. Dankeschön

daCypher  04.04.2025, 14:06
@Annette0806

Ah, super. Ja, manchmal drückt man versehentlich eine Taste und die Spalte wird gelöscht. Gut, dass es jetzt geht 👍

Ein paar mehr Informationen wären schön. Wie und wo hast du deinen "Bereich" definiert? Typischerweise wird dieser mit einem Set Kommando festgelegt, der hier vollkommen fehlt. Das heißt, du wirst ihn irgendwo anders im Makro definiert haben. So ist es schwierig deinen Code zu debuggen, da ich das Problem nicht nachstellen kann.


Annette0806 
Beitragsersteller
 04.04.2025, 14:04

Wenn ich dich richtig verstehe, möchtest du wissen, wie ich definiere, duch welche zellen Excel gehen soll oder? das mache ich über die Funktion =VerbindeKW(B6:BI6) Aber da fehlt eine Zelle (s.o.) und daher gibt es den Fehler. Danke für den Hinweis, beim nächsten Mal werde ich noch genauer schreiben wo der Fehler liegt.

daCypher  04.04.2025, 10:04

Du kannst die Funktion, so wie sie ist, in einer Formel auf einem Tabellenblatt benutzen. "Set" brauchst du nur, wenn du die Funktion in einer anderen VBA-Funktion benutzen willst

Z.B.

=VerbindeKW(K2:BI2)