忽略重复计算

时间:2016-11-30 06:41:51

标签: excel excel-formula formulas

我有以下样本每日生产数据,我必须计算总处理时间

  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列

3 个答案:

答案 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))

这很难理解,如果它们都是在同一天开始的话,这是你所追求的还是其他逻辑?

Example

修改

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