2017-03-14 1 views
1

Ich versuche, eine Excel-Funktion zu erstellen, die die Tageszeit kategorisiert. Ich habe eine Spalte von DateTimes, Format: 3/3/2017 13:30 (kann aber das Format bei Bedarf ändern). Ich brauche eine zweite Spalte, die "ON" für die Stunden von 9 bis 5 Uhr, "AM" für 5 bis 9 Uhr, "BH" für 9 bis 17 Uhr und "PM" für die Stunden von 17 bis 21 Uhr angibt . Ich brauche auch Wochenenden, aber ich denke, ich kann diese manuell ziehen.Excel Kategorisieren Zeiten des Tages

Ergebnis aussehen würde (wo ich Spalte 1 und müssen Spalte 2 berechnen):

DateTime   Time period 
3/3/2017 13:30  BH 
3/3/2017 17:30  PM 
3/4/2017 3:30  ON 
3/5/2017 5:30  AM 
+0

Hallo alle. Nicht sicher, wie wichtig es ist, aber ich wähle Adams Antwort basierend auf der Tatsache, dass es die ist, die ich benutze. Alle haben sich als richtig erwiesen, aber Adams hatte das Wochenendstück, das half. –

Antwort

2

Wir können nur durch die Prüfung ein Ende jeder Reihe ein paar Zeichen speichern. Sobald wir einen Wert für weniger als 5 Uhr getestet haben, müssen wir nicht mehr testen, ob es länger als 5 Uhr morgens ist. (Die AND( Aussagen sind nicht erforderlich.)

=IF(HOUR(A1)<5,"ON",IF(HOUR(A1)<9,"AM",IF(HOUR(A1)<17,"BH",IF(HOUR(A1)<21,"PM","ON")))) 

Wenn Sie Wochenenden erkennen wollen, wickeln Sie das Ganze an einem Wochenende zu testen. Zwei Methoden vorgestellt:

  1. Der bessere Ansatz, vorgeschlagen von @ScottCraner in den Kommentaren:

=IF(weekday(a1,2)>5,"WEEKEND","THE WHOLE THING")

Das erste Argument für weekday( ist offensichtlich das Datum, das wir testen. Die zweite Kraft am Montag ist der erste Tag der Woche, der die Sonne als die letzten zwei Sat & verlässt.

mit dem Rest Zusammen würden wir bekommen:

=IF(weekday(a1,2)>5,"WEEKEND",IF(HOUR(A1)<5,"ON",IF(HOUR(A1)<9,"AM",IF(HOUR(A1)<17,"BH",IF(HOUR(A1)<21,"PM","ON"))))) 
  1. Eine unnötig lange und etwas zerbrechlich Ansatz (Brüche in nicht-englischen)

=IF(LEFT(TEXT(A1,"ddd"),1)="S","WEEKEND","THE WHOLE THING")

Dies funktioniert, weil TEXT(A1,"ddd") das Datum als den dreistelligen Wochentag formatiert. In Englisch beginnen zumindest beide Wochenendtage mit einem "S", und wir verwenden left(, um diesen ersten Buchstaben zu erfassen.

Zusammen würden sie aussehen wie am Ende:

=IF(LEFT(TEXT(A1,"ddd"),1)="S","WEEKEND",IF(HOUR(A1)<5,"ON",IF(HOUR(A1)<9,"AM",IF(HOUR(A1)<17,"BH",IF(HOUR(A1)<21,"PM","ON"))))) 
+2

Sie Wochenende ist toll, wenn die Sprache nicht Englisch ist, "IF (WEEKDAY (A1,2)> 5," Weekend ", ..." wäre wahrscheinlich besser und robuster in einem internationalen Forum. Und es ist kürzer. –

1

Ein wenig lang, aber funktioniert:

=IF(AND(HOUR(A2)>=9,HOUR(A2)<17),"BH",IF(AND(HOUR(A2)>=17,HOUR(A2)<21),"PM",IF(AND(HOUR(A2)>=5,HOUR(A2)<9),"AM","ON"))) 

enter image description here

3

Make a Tabelle mit der niedrigeren Zeit und erwarteter Ausgang:

enter image description here

Dann ein einfaches VLOOKUP:

=VLOOKUP(MOD(A2,1),F:G,2) 

enter image description here

2

einfach eine andere Art und Weise zu zeigen:

=IF(NETWORKDAYS(A2,A2),CHOOSE(SUM((({"5:00";"9:00";"17:00";"21:00"}*1)<MOD(A2,1))*1)+1,"ON","AM","BH","PM","ON"),"WEEKEND") 

Dies ist ein Formel-Array und muss mit ctrl + bestätigt werden shift + eingeben.

Kann verlängert werden, wie Sie möchten, ohne Probleme mit der Klammergrenze zu bekommen. Auch wie die Scott's Antwort: das funktioniert mit Zeiten wie 17:43. ;)

Verwandte Themen