excel 如何计算预期提前期后的预期数量

ffdz8vbo  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(139)

我有一个表与不同的产品和日期。每种产品都有一个预期的交付时间,从它被生产到它被批准销售。我想按天捕获预期的“批准”项目,如下表所示。
| 日|产物|生产量|预期批准时间(天)|核准数量|
| - -----|- -----|- -----|- -----|- -----|
| 1|一个|二十个|2| 0|
| 2|一个|二十二|2| 0|
| 3|一个|二十三|1|二十个|
| 4|一个|十九|1|四十五|
| 5个|一个|十五|1|十九|
| 下期|一个|- -一种|- -一种|十五|
| 1| B| 5个|1| 0|
| 2| B| 3| 1| 5个|
| 3| B| 3| 2| 3|
| 4| B|十二岁|1| 0|
| 5个|B|八|2|十五|
| 下期|B|- -一种|- -一种|八|
我试着在stackoverflow和网上寻找类似的东西,但找不到任何东西。

a5g8bdjr

a5g8bdjr1#

为此,您需要一个helper列。helper列计算批准日期,使用

=IFERROR(D:D+A:A,"-")

然后,您可以使用

=IF(ISNUMBER(A:A),SUMIFS(C:C,B:B,B:B,E:E,A:A),SUMIFS(C:C,B:B,B:B,E:E,">"&MAXIFS(A:A,B:B,B:B)))

在Office 365中,这可以转换为以下内容:
E2中用途:
=IFERROR(A2:A13+D2:D13,"-")
F2中用途:
=LET(a,A2:A13,b,B2:B13,c,C2:C13,d,D2:D13,e,E2:E13,IF(ISNUMBER(e),SUMIFS(c,b,b,e,a),SUMIFS(c,b,b,e,">"&MAXIFS(a,b,b))))

ryevplcw

ryevplcw2#

这也可用于:

=LET( range,    A2:D13,
      product,  INDEX(range,,2),   day,  INDEX(range,,1),   lead,  INDEX(range,,4),   prod,  INDEX(range,,3),
      finished, IFERROR(day+lead,0),
      p,        TOROW(product)=product,
      q,        IFERROR(--prod,0),
      qty,      MMULT(p*(TOROW(finished)=day),q),

IF(ISERROR(--day),
   MMULT(--p,q)-MMULT(--p,qty),
   qty))

finished是天数+提前期的总和。
qty对与日期day匹配的finished的生产数量q求和。
因为您在日期列中使用了文本,所以它永远不会与日期匹配。因此,我构建了一个错误检查器来检查day是否为值。如果它出错,它会将给定产品的所有生产数量减去给定产品的qty的总和(余数)。如果它没有错误,它将给出qty的结果。

k0pti3hp

k0pti3hp3#

这是一个VBA解决方案,尽管它可能毫无意义,因为Peh已经提供了一个与内置函数一起工作的解决方案。
只需选择包含数据的工作表并运行宏。如果你的例子是有代表性的,它应该是有效的。我假设所有项目都在期末得到批准,而不管它们的批准需要多少天。

Sub approvedItems()
    Dim arr() As Variant, lr As Integer, rng As Range
    
    With ActiveSheet
        lr = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    
    Set rng = Range("A2:E" & lr)
    arr = rng
    
    Dim periodCount As Integer
    periodCount = UBound(arr) / 6
    
    For k = 1 To UBound(arr)
        arr(k, 5) = 0
    Next k
    
    Dim rowNo As Integer
    For j = 1 To periodCount
        For i = j * 6 - 5 To j * 6 - 1
            rowNo = i + arr(i, 4)
            If rowNo > j * 6 Then rowNo = j * 6
            arr(rowNo, 5) = arr(rowNo, 5) + arr(i, 3)
        Next i
    Next j

    
    rng = arr
End Sub

相关问题