员工间隔调度公式

时间:2017-10-07 17:07:02

标签: excel excel-formula

我一直在尝试按1的间隔创建计划。返回值是员工正在工作(1),另一个是Break(B),另一个是Lunch(L)。我提到列出的链接提供了一个可以工作的类似解决方案,但是在AP列的公式中仍然存在错误。它应该返回False,因为员工休息,但返回True。我已经颠倒了公式,看看这是否会有所帮助,但事实并非如此:

Excel: track number of employees at a given moment

我尝试了类似的公式,如下所示:

=IF(AND(K$3>=$C5,K$3<$F5),1,IF(AND(K$3>=$F5,K$3<$I5),"B",IF(AND(K$3>=$I5,K$3<=$D5),1,IF(AND(K$3>=$D5,K$3<=$E5),"L",IF(AND(K$3>=$E5,K$3<=$G5),1,IF(AND(K$3>=$G5,K$3<=$J5),"B",IF(AND(K$3>=$J5,K$3<=$H5),1,"")))))))

Snip of Schedule Spreadsheet

唯一的问题是,如果我让员工分班,员工只有开始和停止时间以及第一次休息,然后在员工工作的其余时间显示休息。任何帮助,将不胜感激!同样,我更愿意从上面显示的链接开始第一个选项的路线。

2 个答案:

答案 0 :(得分:0)

使用范围名称是个好主意,无论公式的复杂程度如何。我使用过这些:

╔═════════════╦══════════════════════════╗
║ Range Name  ║        Refers to         ║
╠═════════════╬══════════════════════════╣
║ break_1     ║ =F:F                     ║
║ break_1_end ║ =I:I                     ║
║ break_2     ║ =G:G                     ║
║ break_2_end ║ =J:J                     ║
║ emp_times   ║ =$K$3:$AU$3              ║
║ in_time     ║ =C:C                     ║
║ lunch_end   ║ =E:E                     ║
║ lunch_start ║ =D:D                     ║
║ out_time    ║ =H:H                     ║
╚═════════════╩══════════════════════════╝

以下是公式:

=IF(OR(AND(emp_times>=in_time,emp_times<break_1),
       AND(emp_times>=break_1_end,emp_times<lunch_start),
       AND(emp_times>=lunch_end,emp_times<break_2),
       AND(emp_times>=break_2_end,emp_times<out_time)),1,

    IF(OR(AND(emp_times>=break_1,emp_times<break_1_end),
          AND(emp_times>=break_2,emp_times<break_2_end)),"B",

       IF(AND(emp_times>=lunch_start,emp_times<lunch_end),"L","")))

修改后的公式:

=IF(OR(AND(emp_times>=break_1,emp_times<break_1_end),
       AND(emp_times>=break_2,emp_times<break_2_end)), "B",

    IF(AND(emp_times>=lunch_start,emp_times<lunch_end), "L",

       IF(OR(AND(emp_times>=in_time,emp_times<break_1),
             AND(emp_times>=break_1_end,emp_times<lunch_start),
             AND(emp_times>=lunch_end,emp_times<break_2),
             AND(emp_times>=break_2_end,emp_times<out_time)), 1, "")))

您的公式存在不一致之处。休息的结束时间(10:15和15:15)计为1(&#34;存在&#34;),而午餐的结束时间计为&#34; L&#34;。如果忽略了这个事实,那么上面的公式应该可以正常工作。

如果是有意的,那么你可能需要更改lunch_end出现的两行,如下所示:

  • AND(emp_times>lunch_end,emp_times<break_2), - 公式的第3行

  • IF(AND(emp_times>=lunch_start,emp_times<=lunch_end),"L",""))) - 最后一行

您的公式在列AP中不会产生任何错误。由于员工时间增加了15分钟,因此单元格AP3的值应为15:45,在您的示例中,应该返回值1.确实如此。

另一个提示:

每当你有嵌套的IF时,最好使用Alt+Enter将公式扩展到多行,最好还是缩进它。它会让它更具可读性并且不那么令人生畏。

答案 1 :(得分:0)

如果我理解正确,你想知道这个人进出的时间。这就是我的想法。

首先,您需要有一个帮助行(我放入row 4的地方显示0 (in)1 (out)。由于数据未排序,我必须使用此公式cell J5(根据您的需要调整)以使其有效:

=IFERROR(LOOKUP(2,1/($B$5:$I$5=J3),$B$4:$I$4),I5)

使用VLOOKUP' with '1' in the 4th parameter or even INDEX / MATCH也会更容易。

但无论如何,如果你打算这样做,请试着告诉我。