2016-07-01 5 views
0

Ich habe Zellen zu konvertieren, die entweder Zeit in diesem Format enthalten:Wie Viertel Jahre auf anderes Format

1625 (16 für 2016 und 25 für Woche 25) Oder in diesem Format

2016-Q2 (Q2 bedeutet Quartal 2, wenn das Jahr)

Bei der Umwandlung I Viertel der Mitte der Woche des Quartals

2016-Q1 = 1608

sein wollen

2016-Q2 = 1620

2016-Q3 = 1633

2016-Q4 = 1646

Ich möchte nicht die Zeiten in der Zelle ihre in konvertieren. Ich möchte es konvertieren Format YYWW für eine Formel für eine Zeitleiste in einem anderen Blatt. Also verwende ich Hilfezellen mit dem konvertierten Wert und referenziere diese anstelle der Werte im anderen Blatt.

Ich habe dies mit verschachtelten Funktionen getan, die zu Meilen langen Formeln führen, weil die Zeitleiste sehr lang sein muss und die Zeit sehr gut 2025-Q3 sein kann.

ein =IF('Gulpilspuls NT'!U4="2016-Q1";1608;IF('Gulpilspuls NT'!U4="2016-Q2";1620;IF('Gulpilspuls NT'!U4="2016-Q3";1633;IF('Gulpilspuls NT'!U4="2016-Q4";1646;IF('Gulpilspuls NT'!U4="2017-Q1";1708;IF('Gulpilspuls NT'!U4="2017-Q2";1720;IF('Gulpilspuls NT'!U4="2017-Q3";1733;IF('Gulpilspuls NT'!U4="2017-Q4";1746;IF('Gulpilspuls NT'!U4="2018-Q1";1808;IF('Gulpilspuls NT'!U4="2018-Q2";1820;IF('Gulpilspuls NT'!U4="2018-Q3";1833;IF('Gulpilspuls NT'!U4="2018-Q4";1846;IF('Gulpilspuls NT'!U4="2019-Q1";1908;IF('Gulpilspuls NT'!U4="2019-Q2";1920;IF('Gulpilspuls NT'!U4="2019-Q3";1933;IF('Gulpilspuls NT'!U4="2019-Q4";1946;IF('Gulpilspuls NT'!U4="2020-Q1";2008;IF('Gulpilspuls NT'!U4="2020-Q2";2020;IF('Gulpilspuls NT'!U4="2020-Q3";2033;IF('Gulpilspuls NT'!U4="2020-Q4";2046;IF('Gulpilspuls NT'!U4="2021-Q1";2108;IF('Gulpilspuls NT'!U4="2021-Q2";2120;IF('Gulpilspuls NT'!U4="2021-Q3";2133;IF('Gulpilspuls NT'!U4="2021-Q4";2146;IF('Gulpilspuls NT'!U4="2022-Q1";2208;IF('Gulpilspuls NT'!U4="2022-Q2";2220;IF('Gulpilspuls NT'!U4="2022-Q3";2233;IF('Gulpilspuls NT'!U4="2022-Q4";2246;IF('Gulpilspuls NT'!U4="2023-Q1";2308;IF('Gulpilspuls NT'!U4="2023-Q2";2320;IF('Gulpilspuls NT'!U4="2023-Q3";2333;IF('Gulpilspuls NT'!U4="2023-Q4";2346;IF('Gulpilspuls NT'!U4="2024-Q1";2408;IF('Gulpilspuls NT'!U4="2024-Q2";2420;IF('Gulpilspuls NT'!U4="2024-Q3";2433;IF('Gulpilspuls NT'!U4="2024-Q4";2446;IF('Gulpilspuls NT'!U4="2025-Q1";2508;IF('Gulpilspuls NT'!U4="2025-Q2";2520;IF('Gulpilspuls NT'!U4="2025-Q3";2533;IF('Gulpilspuls NT'!U4="2025-Q4";2546;IF('Gulpilspuls NT'!U4="2026-Q1";2608;IF('Gulpilspuls NT'!U4="2026-Q2";2620;IF('Gulpilspuls NT'!U4="2026-Q3";2633;IF('Gulpilspuls NT'!U4="2026-Q4";2646;IF('Gulpilspuls NT'!U4="2027-Q1";2708;IF('Gulpilspuls NT'!U4="2027-Q2";2720;IF('Gulpilspuls NT'!U4="2027-Q3";2733;IF('Gulpilspuls NT'!U4="2027-Q4";2746;IF('Gulpilspuls NT'!U4="2028-Q1";2808;IF('Gulpilspuls NT'!U4="2028-Q2";2820;IF('Gulpilspuls NT'!U4="2028-Q3";2833;IF('Gulpilspuls NT'!U4="2028-Q4";2846;IF('Gulpilspuls NT'!U4="2029-Q1";2908;IF('Gulpilspuls NT'!U4="2029-Q2";2920;IF('Gulpilspuls NT'!U4="2029-Q3";2933;IF('Gulpilspuls NT'!U4="2029-Q4";2946;IF('Gulpilspuls NT'!U4="2030-Q1";3008;IF('Gulpilspuls NT'!U4="2030-Q2";3020;IF('Gulpilspuls NT'!U4="2030-Q3";3033;IF('Gulpilspuls NT'!U4="2030-Q4";3046;IF('Gulpilspuls NT'!U4="2031-Q1";3108;IF('Gulpilspuls NT'!U4="2031-Q2";3120;IF('Gulpilspuls NT'!U4="2031-Q3";3146;IF('Gulpilspuls NT'!U4="2031-Q4";3146;IF('Gulpilspuls NT'!U4="2032-Q1";3208;IF('Gulpilspuls NT'!U4="2032-Q2";3220;IF('Gulpilspuls NT'!U4="2032-Q3";3233;IF('Gulpilspuls NT'!U4="2032-Q4";3246;IF('Gulpilspuls NT'!U4="2033-Q1";3308;IF('Gulpilspuls NT'!U4="2033-Q2";3320;IF('Gulpilspuls NT'!U4="2033-Q3";3333;IF('Gulpilspuls NT'!U4="2033-Q4";3346;IF('Gulpilspuls NT'!U4="2034-Q1";3408;IF('Gulpilspuls NT'!U4="2034-Q2";3420;IF('Gulpilspuls NT'!U4="2034-Q3";3433;IF('Gulpilspuls NT'!U4="2034-Q4";3446;IF('Gulpilspuls NT'!U4="2035-Q1";3508;IF('Gulpilspuls NT'!U4="2035-Q2";3520;IF('Gulpilspuls NT'!U4="2035-Q3";3533;IF('Gulpilspuls NT'!U4="2035-Q4";3546;IF('Gulpilspuls NT'!U4="2036-Q1";3608;IF('Gulpilspuls NT'!U4="2036-Q2";3620;IF('Gulpilspuls NT'!U4="2036-Q3";3633;IF('Gulpilspuls NT'!U4="2036-Q4";3646;IF('Gulpilspuls NT'!U4="2037-Q1";3708;IF('Gulpilspuls NT'!U4="2037-Q2";3720;IF('Gulpilspuls NT'!U4="2037-Q3";3733;IF('Gulpilspuls NT'!U4="2037-Q4";3746;IF('Gulpilspuls NT'!U4="2038-Q1";3808;IF('Gulpilspuls NT'!U4="2038-Q2";3820;IF('Gulpilspuls NT'!U4="2038-Q3";3833;IF('Gulpilspuls NT'!U4="2038-Q4";3846;'Gulpilspuls NT'!U4))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

Wie man deutlich sehen diese Methode kann nicht die beste ist. Ich kann es nicht so lange machen, weil verschachtelt, wenn Funktionen nur 64 Verschachtelungsebenen enthalten können. Habt ihr einen besseren Vorschlag dafür?

Die Formel muss mit beiden Formaten der Zeiteingabe arbeiten und ich muss es in der Lage sein, alle Zellen 1: 1 zu konvertieren, dh 1 Zelle im Kalender muss 1 konvertierte Zelle an der anderen Stelle, die ich verwenden kann für die Formel. Wenn die Zelle im Kalender nicht YYYY-Q1234 hat? Es sollte nur zeigen, was es ist, wie Sie am Ende meiner Formel sehen können.

+0

Ich denke, Meins sollte für Sie arbeiten ... vielleicht ein etwas einfacherer Weg ohne if's, aber ich denke, es wird auf eine Weise funktionieren, die Sie verstehen können –

Antwort

0

BEARBEITEN: Ich habe gerade festgestellt, dass, wenn das Original im Format YYWW ist, dass Sie NICHT wollen, änderte es auf die Mitte Quartal Woche Nummer.So vereinfachen wir die Formeln:

=IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46)) 

und wenn Sie YYWW wollen immer als numerisch dargestellt werden:

=1*IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46)) 

Und hier sind die Ergebnisse für verschiedene Proben:

enter image description here

EDIT: Wenn Sie nach Leerzeichen suchen müssen, können Sie dies einfach tun:

=IF(LEN(A1)=0,"",1*IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46))) 

Wenn jedoch ein 0 nicht in einem nachgeschalteten Problem führt, können Sie die ursprüngliche, kürzere Formel verwenden und nur ein benutzerdefiniertes Format verwenden Null kehrt zu unterdrücken: 0;;

Und wenn Sie müssen überprüfen, Für andere Bedingungen, für die Sie keine Daten verarbeiten möchten, können Sie ähnliche Aktionen ausführen.

+0

Dies funktionierte nur eine Frage. Wenn die Zelle, die sie zu konvertieren versucht, leer ist, gibt sie 0 zurück. Kann ich sie ändern, um "" zurückzugeben, d. H. Leer? –

+0

@FelixTorssell Ich werde die Formel ändern, um auf das Problem "leere Zelle" zu achten. Es ist eine einfache Modifikation. Denken Sie jedoch daran, bei der Darstellung eines Problems immer alle für Ihr Problem relevanten Umstände anzugeben. –

+0

Danke! Es tut mir leid, dass ich nicht bemerkt habe, dass die Rückgabe von 0 ein Problem sein würde, bevor ich es mit meiner anderen Formel getestet habe. Ich schätze Ihre Hilfe :) –

0

mich wieder Lassen Sie versuchen

="20"&LEFT(N5,2)&IF(MOD(N5,100)<=8,"-Q1",IF(MOD(N5,100)<=20,"-Q2",IF(MOD(N5,100)<=33,"-Q3",if(MOD(N5,100)<=46,"-Q4","-Q1")))) 

Sollte für das Jahr 2000 vergangenen Jahr alles funktioniert;)

+0

Sie haben zu viele Argumente für diese Funktion eingeben –

+0

Ok sooo das macht das Gegenteil von dem, was ich will. Ich möchte, dass YYYY-Q1-4 zu YYWW wird und nicht umgekehrt –

1

hier Ihre Formel ist.

=IF(AND(LEN(C6)=4,ISERROR(FIND("-",C6))),C6,MID(C6,3,2)&INDEX({"08",20,33,46},RIGHT(C6,1))) 

Stellen Sie sicher, dass in Ihren Daten kein Platz mehr vorhanden ist. Nicht so "2016-Q1", sondern wie "2016-Q1".

enter image description here

+0

Und ich ändere einfach C5, wo immer die Daten für die Zeit sein könnten? funktioniert das, wenn die Zelle bereits Daten in 1630 hat? –

+0

Nein, es wird nicht funktionieren, wenn Zelle Daten wie 1630 hat. Lassen Sie mich etwas ändern. –

+0

Könnte durch einige Beispiele wie 1634 = ????, 1640 = ???? –

0

so etwas wie dies sollte es tun, aber auf halbem Weg durch Q1, ist Woche 6, so müssen Sie einstellen, ob Ihr Jahr auf 1/1 startet nicht

Function get_week(strInput As String) As String 

Dim strQ As String 
Dim bytQ As Byte 
Dim dblMultiplier As Double 
Dim intWeekNumber As Integer 

strQ = Split(strInput, "-")(0) 
bytQ = CByte(Right(strQ, 1)) 

dblMultiplier = (bytQ - 1)/4 
intWeekNumber = (dblMultiplier * 52) 
intWeekNumber = intWeekNumber + (13/2) 

get_week = Split(strInput, "-")(1) & "-" & CStr(intWeekNumber) 

End Function 
+0

Ich bin nicht sehr vertraut mit Vb., Wo wird diese Ausgabe und wie wähle ich, wo es ausgeben soll? –

+0

in b1, = get_week (a1) –

Verwandte Themen