|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 zxsea_7426 于 2024-7-21 09:18 编辑
供参考:(此采购数量到货后,库存量允许超过最高库存量1 个采购单位,即取整上浮1个整数单位)
'https://club.excelhome.net/thread-1697719-1-1.html
Sub 快速求采购数量()
la_ro = Cells(Rows.Count, "B").End(3).Row
ar = Cells(3, 2).Resize(la_ro - 2, 6)
Set reg = CreateObject("VBScript.RegExp")
Set d = CreateObject("scripting.dictionary")
With reg
.Global = True
.Pattern = "(\d+)([\u4e00-\u9fa5])\/([\u4e00-\u9fa5])" '[\u4e00-\u9fa5]
For i = 1 To UBound(ar)
If ar(i, 2) = ar(i, 5) Then '库存单位与采购单位一致不需进行匹配
ar(i, 6) = ar(i, 4) - ar(i, 3)
Else
'******************************************
'库存单位与采购单位不一致需要匹配计算
'清楚字典内容,并记录新信息与数据
d.RemoveAll
If .test(ar(i, 1)) Then
Set ma = .Execute(ar(i, 1))
For Each m In ma
数量 = Val(m.submatches(0))
小单位 = m.submatches(1)
大单位 = m.submatches(2)
d(小单位) = Array(大单位, 数量)
Next
End If
'根据字典记录的数据进行匹配
If d.Count >= 1 Then
If d.exists(ar(i, 2)) Then
New_小单位 = ar(i, 2)
采购数量 = 0
需求量 = ar(i, 4) - ar(i, 3)
If 需求量 > 0 Then
Do
采购数量 = WorksheetFunction.RoundUp(需求量 / d(New_小单位)(1), 0)
需求量 = 采购数量
New_小单位 = d(New_小单位)(0)
Loop Until Not d.exists(New_小单位) '没有更高一级的单位结束循环
End If
ar(i, 6) = 采购数量
End If
End If
'******************************************
End If
Next i
End With
Cells(3, 7).Resize(UBound(ar), 1) = Application.WorksheetFunction.Index(ar, 0, 6)
End Sub
|
评分
-
1
查看全部评分
-
|