Excel分类时间

时间:2017-03-14 21:13:31

标签: excel

我正在尝试创建一个excel函数,用于对一天中的时间进行分类。 我有一列DateTimes,格式:3/3/2017 13:30(但如果需要可以更改格式)。我需要第二栏宣布“开启”时间为晚上9点至早上5点,“上午”为上午5点至上午9点,“BH”为上午9点至下午5点,“PM”为下午5点至晚上9点。 。我也需要周末,但我想我可以手动拉它们。

结果看起来像(我有第1列,需要计算第2列):

ogp_remote_servers

4 个答案:

答案 0 :(得分:3)

制作一张时间较短的表格并预期输出:

enter image description here

然后是一个简单的VLOOKUP:

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

enter image description here

答案 1 :(得分:2)

我们可以通过仅测试每个范围的一端来保存几个字符。一旦我们测试了一个不到早上5点的值,我们就不再需要测试它是否大于早上5点。 (AND(语句不是必需的。)

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

如果你想检测周末,请将整个事情包裹在周末测试中。提出了两种方法:

  1. @ScottCraner在评论中提出的更好的方法:
  2. =IF(weekday(a1,2)>5,"WEEKEND","THE WHOLE THING")

    weekday(的第一个参数显然是我们测试的日期。周二的第二个力量是本周的第一天,这使得Sat&amp;太阳是最后两个。

    结合其他人,我们会得到:

    =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. 一种不必要的长而有点脆弱的方法(以非英语打破)
    2. =IF(LEFT(TEXT(A1,"ddd"),1)="S","WEEKEND","THE WHOLE THING")

      这是有效的,因为TEXT(A1,"ddd")将日期格式化为三个字母的星期几。至少在英语中,两个周末都以“S”开头,我们使用left(来获取第一个字母。

      总之,它最终看起来像:

      =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 :(得分:2)

只是为了表现出不同的方式:

=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")
  

这是一个数组公式,必须用 ctrl + shift + 输入确认。

可以随意扩展而不会遇到支架限制的麻烦。 也像斯科特的答案一样:这适用于17:43之类的时间。 ;)

答案 3 :(得分:1)

有点长,但有效:

=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