如何根据时间范围创建嵌套的 if 语句?

如何根据时间范围创建嵌套的 if 语句?

我正在尝试将一列中的一系列时间范围分组为 4 个时间范围桶(上午 7 点至中午 12 点、中午 12 点至下午 4 点、下午 4 点至晚上 8 点、晚上 8 点至中午 12 点),我将在下一列中显示这些时间范围。因此,如果左侧的时间是上午 7 点 30 分,则右侧的时间范围会变得单调乏味,即上午 7 点至中午 12 点。如果时间范围未知,则会显示“未知”。我使用的是嵌套的 if/and 函数。有人能告诉我为什么这个公式只会显示未知值吗?我似乎无法弄清楚我遗漏了什么。

=IF(AND(G2>=TIMEVALUE("07:00:00"),G2<=TIMEVALUE("12:00:00")),"7AM-12PM",IF(AND(G2>=TIMEVALUE("12:30:00"),G2<=TIMEVALUE("04:00:00")),"12PM-4PM",IF(AND(G2>=TIMEVALUE("04:30:00"),G2<=TIMEVALUE("08:00:00")),"4PM-8PM",IF(AND(G2>=TIMEVALUE("08:30:00"),G2<=TIMEVALUE("23:30:00")),"8PM-12AM","Unknown"))))

答案1

您在最后一个时间间隔中输入了一些正确的东西,而您在第二个和第三个时间间隔中却输入了错误。您需要使用 24 小时制(您在 23:30:00 中输入了 24 小时制)。但是中午之后的所有其他时间都输入了上午时间。因此下午 4 点应该是 16:00,晚上 8 点应该是 20:00。

=IF(AND(G2>=TIMEVALUE("07:00:00"),G2<=TIMEVALUE("12:00:00")),"7AM-12PM",IF(AND(G2>=TIMEVALUE("12:30:00"),G2<=TIMEVALUE("16:00:00")),"12PM-4PM",IF(AND(G2>=TIMEVALUE("16:30:00"),G2<=TIMEVALUE("20:00:00")),"4PM-8PM",IF(AND(G2>=TIMEVALUE("20:30:00"),G2<=TIMEVALUE("23:30:00")),"8PM-12AM","Unknown"))))

坚持使用相同的构造,您实际上可以将其缩短一点。TIMEVALUE 转换时间的文本表示。TIME 将从数值构造时间。因此公式将是:

=IF(AND(G2>=TIME(7,0,0),G2<=TIME(12,0,0)),"7AM-12PM",IF(AND(G2>=TIME(12,30,0),G2<=TIME(16,0,0)),"12PM-4PM",IF(AND(G2>=TIME(16,30,0),G2<=TIME(20,0,0)),"4PM-8PM",IF(AND(G2>=TIME(20,30,0),G2<=TIME(23,30,0)),"8PM-12AM","Unknown"))))

您的公式实际上并没有给出“未知”,只是给出了错误的间隔。上面的修订公式对我来说是有效的。如果您得到的是“未知”的所有内容,则还有一个额外的问题,也许输入的时间没有被识别为时间值(您是如何输入的?)。

顺便说一句,对于这么长的嵌套 IF,请考虑使用查找。

相关内容