我有以下样本每日生产数据,我必须计算总处理时间
Date Batch Batch Code Process time Changeover1 Changeover2 Total time
7-Jan-16 CBA6001 CBA 8 1 6 0
8-Jan-16 CBA6001 CBA 8 1 6 9
8-Jan-16 CBA6002 CBA 8 1 6 9
8-Jan-16 CBA6003 CBA 8 1 6 0
9-Jan-16 CBA6003 CBA 8 1 6 15
9-Jan-16 CBB6001 CBB 8 1 6 9
9-Jan-16 CBB6002 CBB 8 1 6 9
11-Jan-16 CBB6001 CBB 8 1 6 9
11-Jan-16 CBB6002 CBB 8 1 6 9
11-Jan-16 CBB6003 CBB 8 1 6 0
12-Jan-16 CBB6003 CBB 8 1 6 9
12-Jan-16 CBB6004 CBB 8 1 6 0
13-Jan-16 CBB6004 CBB 8 1 6 15
14-Jan-16 INA6001 INA 6 1 6 7
14-Jan-16 INA6002 INA 6 1 6 0
15-Jan-16 INA6002 INA 6 1 6 7
示例2:
Date Single batch Batch Code Cycle time Atype Btype MyFmla YourFmla
2-Mar-15 RFA5001 RFA 8 1 6 9 9
2-Mar-15 RFA5002 RFA 8 1 6 0 0
3-Mar-15 RFA5002 RFA 8 1 6 15 9
3-Mar-15 INB5003 INB 8 1 6 0 0
4-Mar-15 INB5003 INB 8 1 6 15 9
4-Mar-15 RTA5005 RTA 12 1 6 0 0
5-Mar-15 RTA5005 RTA 12 1 6 13 13
5-Mar-15 RTA5006 RTA 12 1 6 0 0
7-Mar-15 RTA5006 RTA 12 1 6 13 13
7-Mar-15 RTA5007 RTA 12 1 6 13 13
7-Mar-15 RTA5008 RTA 12 1 6 0 0
9-Mar-15 RTA5008 RTA 12 1 6 19 19
9-Mar-15 NZC5003 NZC 6 1 6 7 0
9-Mar-15 NZC5002 NZC 6 1 6 0 0
10-Mar-15 NZC5002 NZC 6 1 6 7 7
10-Mar-15 NZC5003 NZC 6 1 6 13 13
10-Mar-15 LBA5003 LBA 7 1 6 0 0
11-Mar-15 LBA5003 LBA 7 1 6 8 8
11-Mar-15 LBA5004 LBA 7 1 6 0 0
12-Mar-15 LBA5004 LBA 7 1 6 14 8
12-Mar-15 LBB5002 LBB 5 1 6 12 12
我使用以下公式计算时间并向下复制到所有行。逻辑很简单
如果产品有变化,则将changeover2添加到处理时间(1月13日,14日)。如果同一产品批次发生变化,则将changeover1添加到上一批次的处理时间。如果在不同日期生产同一批次,则返回零(因为会有重复)。
现在的问题是,观察行(6,7,8,9),你会发现这两个批次是在这两个日期生产的。应用公式后,观察第6行和第8行,它们是相同的批次,但在不同的日期制作。有时我会在两个日期生产三到四批产品
因此,当我执行公式时,只需考虑一个批次的总时间,其余应返回0
如果批次是在不同的日期生产的,那么如何重写以下公式以避免重复计算
=IF(AND(LEFT(B2,3)=LEFT(B3,3),RIGHT(B2,4)<>RIGHT(B3,4)),(D2+E2+0),IF(AND(LEFT(B2,3)=LEFT(B3,3),RIGHT(B2,4)=RIGHT(B3,4)),0,IF(LEFT(B2,3)<>LEFT(B3,3),(D2+E2+F2),"")))
FYI Changeover1是E列,Changeover2是F列
答案 0 :(得分:0)
此公式将检查上方和下方的所有单元格是否为同一作业/批次:
(您需要将B100
更新为数据末尾的任何单元格,或将其扩展到预期的总大小之外
=IF(AND(COUNTIF(B2:B$100,LEFT(B2,3)&"*")>1,COUNTIF(B2:B$100,B2)=1),D2+E2,IF(COUNTIF(B2:B$100,B2)>1,0,D2+E2+F2))
这很难理解,如果它们都是在同一天开始的话,这是你所追求的还是其他逻辑?
修改强>
=IF(AND(COUNTIF(D18:D$101,LEFT(D18,3)&"*")>1,COUNTIF(D18:D$101,D18)=1),F18+G18,IF(COUNTIF(D18:D$101,D18)>1,0,F18+G18+H18))
我为您评论的数据尝试了此公式,并获得了预期的结果。也许你没有正确地更新所有的细胞参考?
如果您希望更新更少,请考虑使用数组公式和命名范围。虽然因为我在5分钟内开始了一整天的会议,但我今天没有时间举例说明。
答案 1 :(得分:0)
当你必须比较细胞上的一些特征时,我总是避免使用&#34;左&#34;,&#34;右&#34;,&#34; mid&#34;内部&#34;如果&#34;式。为什么?因为它使公式太长而且有时难以阅读。
只需制作包含&#34;左&#34;,&#34;右&#34;,&#34; mid&#34;的新列。式。 例如:你可以将LEFT(B2,3)的结果放在I2中的H2和RIGHT(B2,4)中等等
...然后
=IF(AND(H2=H3,I2<>I3),(D2+E2+0), IF(AND(H2=H3,I2=I3),0,IF(H2<>H3,(D2+E2+F2),"")))
但问题是......该公式仅比较上部单元和下部单元。好吧,使用数据透视表来比较所有数据会更好。我一直都在使用它,这很容易,因为pivot总是把重复的行放到一个唯一的行中。
排除&#34; date&#34;专栏,我认为可以避免重复行。请参阅表格中的here&#34;复制&#34;。 不幸的是...谷歌电子表格不能使用数据透视表,所以我无法完成这个过程,只有最终结果。
答案 2 :(得分:0)
我认为这个应该适合你
=IF(A2=LOOKUP(1,0/($B$2:$B$17=B2),$A$2:$A$17),IF(C2=C3,D2+E2,IF(C2<>C3,D2+E2+F2)),0)
如果您要定期向表中添加新行,您可能希望通过使用INDEX/COUNTA
组合替换$ B $ 17来使范围的长度变得灵活:
=IF(A2=LOOKUP(1,0/($B$2:INDEX($B:$B,COUNTA($B:$B))=B2),$A$2:INDEX($A:$A,COUNTA($A:$A))),IF(C2=C3,D2+E2,IF(C2<>C3,D2+E2+F2)),0)