excel 将积压的库存分配给库存不足的商店

vhmi4jdf  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(152)

我还有任务。
一家零售公司有10家商店(横列)和6000种不同的商品(下行)销售。
每一种商品在一些商店库存不足,而在另一些商店库存过剩。
对于每个项目,我合计了所有商店的库存过剩和库存不足。
对于缺货总额大于超储总额的物料,我希望将超储分配给缺货的商店。
一旦没有剩余内容可供分发,则分发必须停止。
我需要一个代码,其中下降值(股票)在每个单元格,跨越10列/商店,然后回到第一列下降一些更多,并继续在列,直到下降的总数达到总可用。
下面是我目前拥有的代码(动态单元格引用重复了电子表格所有行的代码,即针对不同的库存项目)。
我试图创建一个到目前为止在所有商店中下降的金额的运行总数(定义为变量z)。
Do Until循环会继续执行条件。
我希望在循环体内部检查条件,如果满足条件则停止。
我的疑问:
1.我的Do Until循环有什么问题?
1.是否有办法在循环体不在开始/结束时检查条件?
1.有没有其他的方法来解决这个问题?如果使用solver,请告诉我使用哪种solver代码(solverok,solveradd等),以及各种参数应该设置在什么位置。

Sub Stock_Transfers()
Dim x As Integer
Dim z As Double

For x = Range("A4").Row To Range("A4").End(xlDown).Row

Do Until z = 318
Cells(x, 74).Value = Cells(x, 74).Value + Range("BZ2").Value * Cells(x, 74).Offset(0, -45).Value ' where Cells(x,74).Offset(0,-45).Value refers to a column which contains the corresponding store's sales/month and Range("BZ2").Value refers to a cell which contains a proportion of the month e.g. 0.25 so Range("BZ2").Value * Cells(x, 74).Offset(0, -45).Value = 0.25 of one month's sales.
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 75).Value = Cells(x, 75).Value + Range("BZ2").Value * Cells(x, 75).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 76).Value = Cells(x, 76).Value + Range("BZ2").Value * Cells(x, 76).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 77).Value = Cells(x, 77).Value + Range("BZ2").Value * Cells(x, 77).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 78).Value = Cells(x, 78).Value + Range("BZ2").Value * Cells(x, 78).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 79).Value = Cells(x, 79).Value + Range("BZ2").Value * Cells(x, 79).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 80).Value = Cells(x, 80).Value + Range("BZ2").Value * Cells(x, 80).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 81).Value = Cells(x, 81).Value + Range("BZ2").Value * Cells(x, 81).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 82).Value = Cells(x, 82).Value + Range("BZ2").Value * Cells(x, 82).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Cells(x, 83).Value = Cells(x, 83).Value + Range("BZ2").Value * Cells(x, 83).Offset(0, -45).Value
z = WorksheetFunction.Sum(Range(Cells(x, 74), Cells(x, 83)))
Loop

Next x

End Sub
xoshrz7s

xoshrz7s1#

我并不是要遵循你如何重新分配股票的逻辑--这只是为了说明你如何在满足318标准后立即退出:

Sub Stock_Transfers()

    Const STORE_COUNT As Long = 10
    Const COL_STORE_1 As Long = 74
    
    Dim x As Long, rw As Range, ws As Worksheet
    Dim z As Long 'or Double if you need fractional values..
    Dim col As Long, c As Range
    
    Set ws = ActiveSheet 'or some other sheet...
    
    For x = ws.Range("A4").Row To ws.Range("A4").End(xlDown).Row
        Set rw = ws.Rows(x)
        Do While z <> 318 'or (eg) `Do While Abs(z-318) > 0.05` if you need fractional numbers
            For col = COL_STORE_1 To COL_STORE_1 + STORE_COUNT
                Set c = rw.Cells(col)
                c.Value = c.Value + ws.Range("BZ2").Value * c.Offset(0, -45).Value
                z = WorksheetFunction.Sum(rw.Cells(COL_STORE_1).Resize(1, STORE_COUNT))
                If z = 318 Then Exit For
            Next col
        Loop
nextProduct:
    Next x

End Sub

相关问题