ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 320524|回复: 731

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2010-5-10 22:14 | 显示全部楼层 |阅读模式
本帖最后由 xinjiana 于 2011-9-12 22:47 编辑

e列是设备名称
c列是产品名称
f列是对应产品对应设备的班次产能
g列是订单数量
i列是计算基准
说明:这几列都是计算要用到的,不要删除,也不要添加列,否则无法计算出正确结果
同时,第2,3,4行也是要用于计算的,不要删除,

第二行开始时每天的班次数量,标准是1班

只要这几个地方按照各自需要修改一下,然后按照设备排序就可以实现自动排程了

逻辑不是很复杂,有兴趣的朋友可以自己看看代码

20100518-新增了交货期计算,具体数据在A列
请参考最新的以小时结算的版本,计划数量出现负数的问题已经解决
请参考最新的以小时结算的版本,计划数量出现负数的问题已经解决,计划部分上色及小数问题也解决
最新版本,新增10列备用列,可以输入各种自定义信息,新增10行备用行,可以输入各种自定义信息

计算中的是时间累积错误已经修正,感谢iloveneedyou
生产排程格式-以小时为单位-新增备用列备用行.rar (19.78 KB, 下载次数: 15861)
最新版本,新增自定义开始时间
生产排程格式-以小时为单位-新增自定义开始时间.rar (19.93 KB, 下载次数: 10029)
2010-7-8
最新版本,修改了原来文件中超出排期则重新开始的bug
生产排程格式-以小时为单位-修正了超出排期则自动重新排的bug.rar (19.87 KB, 下载次数: 18494)
260楼的朋友做了点修改,谢谢,需要的朋友可以看看
http://club.excelhome.net/viewth ... &page=26#pid4357841
2011-08-24
最新版本,修改了最后一项只计算一次的bug(就是判断下一行产线为空的时候同事判断本行的差异为0,都符合才退出循环)
修改了超出日产能的bug,修改了不连续排线重新计算工时的bug,增加了定义每个工单的实际开工日期列,这里大家可以根据需要修改下判断语句就好了,在代码里都有说明
可能跟原来的版本个别列有些出入,但是算法还是那个算法,只增加了一个重算工时的数组公式(代码里),有兴趣的可以看看代码;
测试次数不多,可能还有些小问题
生产排程格式-以小时为单位-修正了超出日产能的bug-并增加了一些新的小功能.zip (55.03 KB, 下载次数: 17006)

2011-09-08
搞错了 8-24版本应该是对的...不好意思,诸位坛友测试的时候有问题请告知,谢谢

         
2011-09-12               
做了一个升级版,有兴趣的朋友可以看看
http://club.excelhome.net/thread-763353-1-1.html

本帖最后由 xinjiana 于 2011-9-8 22:00 编辑


补充内容 (2014-6-5 12:38):
2014-6-5
搞了个群,欢迎大家来提问 329882965

补充内容 (2014-6-5 12:40):

这个补充挺有意思的啊



补充内容 (2014-8-27 17:03):
做了一个改进版
http://club.excelhome.net/thread-1148323-1-1.html

补充内容 (2015-4-2 16:09):
一群已满,请加2群,245517963

补充内容 (2017-2-8 13:52):
欢迎大家加入一群,329882965

补充内容 (2017-3-20 15:26):
新版本发布,http://club.excelhome.net/thread-1335193-1-1.html

补充内容 (2017-3-21 17:19):
最新版本,201703 http://club.excelhome.net/thread-1335409-1-1.html

评分

15

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-12-6 13:03 | 显示全部楼层
感谢,学习了!!

TA的精华主题

TA的得分主题

发表于 2023-10-24 18:58 | 显示全部楼层
谢版主加分支持!附件实例基本整理完毕。

TA的精华主题

TA的得分主题

发表于 2023-8-28 13:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-5-31 09:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常专业,学习中

TA的精华主题

TA的得分主题

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

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

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-4-6 21:57 | 显示全部楼层
好好学习,是不是可以实现,只要录入产品的出货日期进行自动排产

TA的精华主题

TA的得分主题

发表于 2022-8-31 10:57 | 显示全部楼层
jeffcn9 发表于 2010-10-28 12:49
感谢楼主的分享,我根据自身的需要进行了修改,增加了几个功能,欢迎大家提意见.

SMT行业目前惨淡啊

TA的精华主题

TA的得分主题

发表于 2022-8-25 14:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
让excel自动排程应该还是力有所不及吧
毕竟用软件的都不能处理好

TA的精华主题

TA的得分主题

发表于 2022-6-30 08:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 10:02 , Processed in 0.046826 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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