求解指定总高度的托盘高度组合及Excel实现方法咨询
仓储托盘堆叠组合Excel求解方案
完全可以通过Excel实现所有符合要求的托盘组合求解,根据你需要的结果范围不同,有两种可行实现路径:
方案1:使用Excel自带Solver规划求解(适合快速获取单个/指定数量解)
操作步骤如下:
- 第一步:搭建基础计算表,A1:A6单元格依次填入6种托盘高度
105、100、84、78、72、66,B1:B6留空作为对应托盘的数量变量(初始值填0,要求为非负整数),C1单元格输入公式=A1*B1下拉填充到C6,C7单元格输入公式=SUM(C1:C6)作为总高统计单元格。 - 第二步:启用Solver工具:如果顶部「数据」选项卡没有找到「规划求解」按钮,先进入「文件-选项-加载项」,底部「管理」下拉选「Excel加载项」,勾选「规划求解加载项」确认后即可显示。
- 第三步:配置Solver参数:
- 目标单元格选择
C7,目标值设置为固定值439 - 可变单元格选择
B1:B6 - 添加两条约束:
B1:B6 >= 0、B1:B6 为整数 - 求解方法选择「单纯线性规划」
- 目标单元格选择
- 第四步:点击「求解」即可得到一组可行解,需要多组解可以在弹出的结果窗口选择「保存方案」,每次求解后手动调整已有解的数量约束重新运行即可。
注意:默认Solver单次运行仅返回1组可行解,若需要导出全量所有符合条件的组合,更推荐使用方案2。
方案2:VBA脚本遍历全量组合(适合一次性导出所有可行解)
6种托盘的最大可能数量上限很低,嵌套循环遍历的运行效率极高,操作步骤如下:
- 第一步:按
Alt+F11打开VBA编辑器,右键点击当前工作簿选择「插入-模块」,粘贴以下代码:
Sub 查找所有托盘组合() Dim h(1 To 6) As Integer, cnt(1 To 6) As Integer Dim total As Integer, nextRow As Integer ' 赋值6种托盘高度 h(1) = 105: h(2) = 100: h(3) = 84 h(4) = 78: h(5) = 72: h(6) = 66 nextRow = 2 ' 结果从第2行开始写入 ' 遍历所有可能的数量组合 For cnt(1) = 0 To 439 \ h(1) For cnt(2) = 0 To (439 - cnt(1) * h(1)) \ h(2) For cnt(3) = 0 To (439 - cnt(1) * h(1) - cnt(2) * h(2)) \ h(3) For cnt(4) = 0 To (439 - cnt(1) * h(1) - cnt(2) * h(2) - cnt(3) * h(3)) \ h(4) For cnt(5) = 0 To (439 - cnt(1) * h(1) - cnt(2) * h(2) - cnt(3) * h(3) - cnt(4) * h(4)) \ h(5) total = cnt(1) * h(1) + cnt(2) * h(2) + cnt(3) * h(3) + cnt(4) * h(4) + cnt(5) * h(5) ' 直接计算最后一种托盘的数量是否符合要求 If (439 - total) >= 0 And (439 - total) Mod h(6) = 0 Then cnt(6) = (439 - total) / h(6) ' 写入结果到表格 Cells(nextRow, 1) = cnt(1): Cells(nextRow, 2) = cnt(2) Cells(nextRow, 3) = cnt(3): Cells(nextRow, 4) = cnt(4) Cells(nextRow, 5) = cnt(5): Cells(nextRow, 6) = cnt(6) nextRow = nextRow + 1 End If Next cnt(5) Next cnt(4) Next cnt(3) Next cnt(2) Next cnt(1) MsgBox "共找到" & nextRow - 2 & "个可行组合" End Sub
- 第二步:返回Excel界面,第一行A1:F1依次填入6种托盘规格作为表头,按
Alt+F8选择刚才保存的宏点击「执行」,即可在表格中得到所有符合要求的组合。
内容的提问来源于stack exchange,提问作者Lasergun
相关产品推荐
相关产品推荐

