ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: xinjiana

[原创] 刚做的一个excel生产排程,多设备,多产品,多班次,不同产能都能实现

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-1-6 14:47 | 显示全部楼层
谢谢分享,保存了

TA的精华主题

TA的得分主题

发表于 2022-1-20 21:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-2-21 14:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-6-30 08:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-8-25 14:26 | 显示全部楼层
让excel自动排程应该还是力有所不及吧
毕竟用软件的都不能处理好

TA的精华主题

TA的得分主题

发表于 2022-8-31 10:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jeffcn9 发表于 2010-10-28 12:49
感谢楼主的分享,我根据自身的需要进行了修改,增加了几个功能,欢迎大家提意见.

SMT行业目前惨淡啊

TA的精华主题

TA的得分主题

发表于 2023-4-6 21:57 | 显示全部楼层
好好学习,是不是可以实现,只要录入产品的出货日期进行自动排产

TA的精华主题

TA的得分主题

发表于 2023-5-18 11:41 | 显示全部楼层

小白求问,这三个地方的判断代码如何更改

image.png

  1.    
  2. 'excel生产排程,多设备,多产品,多班次,不同产能都能实现
  3. '2011-7-18
  4. Sub calc()
  5.     Dim plancount As Double   '计划数量
  6.     Dim calccount As Double   '合计数量
  7.     Dim diffcount As Double   '差异
  8.     Dim machcount As Double   '日产能
  9.     Dim odrcount As Double    '订单重量
  10.     Dim odrdiff As Double     '订单差异
  11.     Dim workclass As Double '工作班次
  12.     Dim odrsum As Double      '订单合计
  13.     Application.ScreenUpdating = False
  14.    
  15.     Range("U18") = Range("u1")
  16.    
  17.     a = Range("iv2").End(xlToLeft).Column '至班次最后一格(第二行,横向)
  18.     b = Range("O65536").End(xlUp).Row '至产线最后一行(E行,竖向)
  19.     Range("U19:iv" & b).ClearContents '清除原计划数量
  20.     Range("U19:iv" & b).Interior.ColorIndex = xlNone
  21.     Range("a19:a" & b).ClearContents '清除原交期
  22.     Range("U3:iv3").ClearContents
  23.    
  24.     Dim beginrow As Integer
  25.     Dim begincol As Integer
  26.    
  27.     c = 19
  28.     beginrow = 19
  29.     begincol = 21
  30.         
  31.         If Cells(19, 10) <> "" Then  '如果填写实际生产日期,则按实际生产日期重新排序
  32.             Range("A19:CT" & b & "").Sort Key1:=Range("J19"), Order1:=xlAscending, Header:=xlGuess, _
  33.             OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
  34.             :=xlPinYin, DataOption1:=xlSortNormal
  35.         End If
  36.         
  37.         If Cells(19, 10) <> "" And Cells(i + 1, 15) <> "" Then                                           '第一次判断.根据实际开始日期 还是默认开始日期
  38.             begincol = Cells(19, 13)
  39.         End If
  40.                 For j = begincol To a '第一层循环:是从11到 班次最后一格(横向 循环)
  41.                 calccount = 0 '合计数量
  42.                
  43.                         For i = c To b '第二层循环:是从K9到 K+有数据的最后一格(竖向  循环)
  44.                                 If i <> 19 Then
  45.                                     '重新计算当天相同产线的已用工时
  46.                                     Cells(3, j).FormulaArray = "=SUM(R19C" & j & ":R" & i - 1 & "C" & j & "/R19C16:R" & i - 1 & "C16*IF(R" & i & "C15=R19C15:R" & i - 1 & "C15,1))"
  47.                                 End If
  48.                             '这段代码也可用来计算已用工时 数据量大的话效率很低
  49.                             '                    For k = 19 To i
  50.                             '                        If k <> i And Cells(k, 15) = Cells(i, 15) Then
  51.                             '                              Cells(3, j) = Cells(k, j) / Cells(k, 16) + Cells(3, j)
  52.                             '                       End If
  53.                             '                    Next
  54.                             workclass = Cells(4, j) '工作时间
  55.                             machcount = Cells(i, 16) '产能
  56.                             plancount = workclass * machcount '计划数量='工作时间*'日产能
  57.                             diffcount = plancount - calccount '差异=计划数量-合计数量
  58.                             odrdiff = Cells(i, 20) * -1 '订单差异=J+当前行号
  59.                            
  60.                             If odrdiff <= diffcount Then '如: 订单差异<='差异 那么:
  61.                                 Cells(i, j) = odrdiff '当班计划数=订单差异
  62.                                 Cells(i, 1) = Cells(18, j) '预计交期=当前完成日期
  63.                                 Cells(3, j) = odrdiff / machcount   '计算使用时间
  64.                                 Cells(i, j).Interior.ColorIndex = 6
  65.                                 '处理值为0的单元格
  66. '                                            If Cells(i, j).Value = 0 Then
  67. '                                                Cells(i, j).Value = ""
  68. '                                                Cells(i, j).Interior.ColorIndex = xlNone
  69. '                                            End If

  70.                             Else '如: 订单差异>差异 那么:
  71.                            
  72.                                 Cells(i, j) = diffcount '当班计划数=差异
  73.                                 Cells(i, j).Interior.ColorIndex = 6

  74.                                     If diffcount < 0 Then '+---如果差异<0
  75.                                     'Cells(i, j) = 0
  76.                                         Cells(i, j) = Int((1 - Cells(i - 1, j) / (Cells(2, j) * Cells(i - 1, 16))) * (Cells(2, j) * Cells(i, 16)))
  77.                                                 If Cells(i, j) >= odrdiff Then
  78.                                                     Cells(i, j) = odrdiff
  79.                                                 End If
  80.                                     End If
  81.                                         Cells(i, 1) = Cells(18, j) '预计交期=当前完成日期
  82.                                         Cells(3, j) = Cells(3, j) + Cells(i, j) / machcount
  83.                                         Cells(i, j).Interior.ColorIndex = 6                     '当班计划数=差异
  84.                                         calccount = 0 '合计数量
  85.                                         c = i
  86.                                          '处理值为0的单元格
  87. '                                                If Cells(i, j).Value = 0 Then
  88. '                                                    Cells(i, j).Value = ""
  89. '                                                    Cells(i, j).Interior.ColorIndex = xlNone
  90. '                                                End If
  91.                                     
  92.                                 Exit For '退出竖向循环,继续横向循环
  93.                                 End If
  94.                            
  95.                            
  96.                             If Cells(i, 15) <> Cells(i + 1, 15) Then  '如果: 产线号不同,那么:
  97.                            
  98.                            
  99.                                 If Cells(19, 10) <> "" And Cells(i + 1, 15) <> "" Then                      '第二处判断 根据实际开始日期 还是默认开始日期
  100.                                    begincol = Cells(i + 1, 13)
  101.                                 End If
  102.                                 
  103.                                 j = begincol '从第一行开始算计划数
  104.                                 calccount = 0 '合计数量归0
  105.                                 Range("o3:iv3").ClearContents
  106.                             End If
  107.                         Next
  108.                         
  109.                     If Cells(i + 1, 15) = "" And Cells(i, 20) = 0 Then '判断最后一个产片的计算
  110.                         Exit For
  111.                     End If
  112.                
  113.                     If j = a Then
  114.                     j = begincol - 1
  115.                     
  116.                     Range("o3:iv3").ClearContents
  117.                     calccount = 0
  118.                     
  119.                         For abc = i To 69
  120.                         If Cells(i, 15) = Cells(i + 1, 15) Then '如果: 产线号同,那么:
  121.                         
  122.                         i = i + 1
  123.                         ElseIf Cells(i, 15) <> Cells(i + 1, 15) Then
  124.                         'j = j + 1
  125.                         
  126.                         End If
  127.                         Next
  128.                     
  129.                     c = i + 1
  130.                     End If
  131.                 If Cells(19, 10) <> "" And Cells(i + 1, 15) <> "" Then                                '第三处判断 .根据实际开始日期 还是默认开始日期
  132.                     begincol = Cells(i + 1, 13)
  133.                 End If
  134.     Next
  135.     Dim rng As Range
  136. '处理值为0的单元格
  137. '    For Each rng In Range(Cells(22, 21), Cells(b, a))
  138. '        If rng.Value = 0 Then
  139. '            rng.Value = ""
  140. '            rng.Interior.ColorIndex = xlNone
  141. '        End If
  142. '    Next
  143.     Application.ScreenUpdating = True
  144. End Sub
  145. Sub cl()
  146.         a = Range("iv2").End(xlToLeft).Column '至班次最后一格(第二行,横向)
  147.         b = Range("O65536").End(xlUp).Row '至产线最后一行(E行,竖向)
  148.         Range("U19:iv" & b).ClearContents '清除原计划数量
  149.         Range("U19:iv" & b).Interior.ColorIndex = xlNone
  150.         Range("a19:a" & b).ClearContents '清除原交期
  151.         Range("U3:iv3").ClearContents
  152. End Sub
  153.         
复制代码

TA的精华主题

TA的得分主题

发表于 2023-5-31 09:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-8-28 13:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

下载学习.  谢谢分享!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:57 , Processed in 0.035263 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表