ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] Excel自动生产排程(至柔Ⅱ)

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-9 09:46 | 显示全部楼层
本帖已被收录到知识树中,索引项:其他插件和工具
研究中,如果有详细说明就好了。

TA的精华主题

TA的得分主题

发表于 2014-3-10 16:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
撇開VBA不看~~這是我見過僅僅用公式寫出來最好版本的排程了~~和我現在用的自動化版本幾乎一樣
只差不用產品換線時候的換線時間了~
下邊是我現在用的~供參考~~Sheets("RATE")是我單獨建立的一個工作表
把標準工時...資料錄入在裡邊~~排程頁面就單獨看每天要做多少
~~有人說比較直觀~~也有人說核對標準的時候麻煩

Sub reSchedule()
    'bottom Row
    rwBottom = Cells(rwHideBottomRow, clBottomRow) - 1
   
    'clear old schedule
       'daily production Qty
        Rows(rwBottom + 1).ClearContents
       'daily production Qty record
        Range(Columns(clNote + 1), Columns(clNote + 40)).ClearContents
       'capacity data
        Rows(rwHideCapacity).ClearContents
        Range(Cells(7, 11), Cells(77, 61)).ClearContents
   
    Set rateSheet = Sheets("RATE")
    model = ""
   
    currentDay = clStartDay
    capacityOccupied# = Cells(rwHideCapacity, currentDay)
    For rwMo = rwMoStart To rwBottom
        'Qty
        openQty = Cells(rwMo, clMoQty)
        If Cells(rwMo, clLot) > 0 Then openQty = Cells(rwMo, clLot)
        If Cells(rwMo, clInputQty) > 0 Then openQty = openQty - Cells(rwMo, clInputQty)
        
        'Rate
        If Cells(rwMo, clModel) <> "" And Cells(rwMo, clModel) <> model Then
           model = Cells(rwMo, clModel).Value
        End If
        shift = ActiveSheet.name
        Set modelNames = rateSheet.Columns(1)
        Set shiftNames = rateSheet.Rows(1)
        rw = Application.Match(model, modelNames, 0)
        cl = Application.Match(shift, shiftNames, 0)
        DailyRate = rateSheet.Cells(rw, cl)
        If DailyRate = 0 Then
           ss = "rw " + model + " ? " + shift + " cl  RATE !"
           ans = MsgBox(ss, 16)
           Exit Sub
        End If
                     
        'production Qty record
        clPQ = clNote
        
        'check special input
        For i = clStartDay To clEndDay
            If Application.IsNumber(Cells(rwMo, i)) Then
               Select Case Cells(rwMo, i).Font.ColorIndex
               Case Is = 5:
                  ocp# = Cells(rwMo, i) / DailyRate
                  Cells(rwHideCapacity, i) = Cells(rwHideCapacity, i) + ocp#
                  Cells(rwBottom + 1, i) = Cells(rwBottom + 1, i) + Cells(rwMo, i)
                  Cells(rwMo, clPQ + 1) = i
                  Cells(rwMo, clPQ + 2) = Cells(rwMo, i)
                  clPQ = clPQ + 2
                  capacityOccupied# = Cells(rwHideCapacity, currentDay)
               Case Is = 3:
                  ocp# = Cells(rwMo, i) / DailyRate
                  Cells(rwHideCapacity, i) = Cells(rwHideCapacity, i) + ocp#
                  Cells(rwBottom + 1, i) = Cells(rwBottom + 1, i) + Cells(rwMo, i)
                  Cells(rwMo, clPQ + 1) = i
                  Cells(rwMo, clPQ + 2) = Cells(rwMo, i)
                  clPQ = clPQ + 2
               Case Else:
                  Cells(rwMo, i) = ""
               End Select
            Else
'               If Cells(rwMo, i) = "        ◆" Then
'                  Cells(rwMo, i) = ""
'               End If
            End If
        Next i
        If clPQ > clNote Then GoTo nextMo
        If openQty = 0 Then GoTo nextMo
        
        'Capacity
        Do
           Select Case Cells(rwDailyNote, currentDay)
              
              Case Is = "0": maxCapacity = 0
              Case Is = "8": maxCapacity = 0.8
              Case Is = "10": maxCapacity = 1
              Case Is = "11": maxCapacity = 1.1
              Case Is = "12": maxCapacity = 1.2
              Case Is = "16": maxCapacity = 1.6
              Case Is = "18": maxCapacity = 1.8
              Case Is = "20": maxCapacity = 2
              Case Else: maxCapacity = 1
           End Select
           
           allocateQty = Int(DailyRate * (maxCapacity - capacityOccupied#))
           If allocateQty > openQty Then
              allocateQty = openQty
              openQty = 0
              nextDay = 0
              capacityOccupied# = capacityOccupied# + CDbl(allocateQty / DailyRate)
              Cells(rwHideCapacity, currentDay) = capacityOccupied#
           Else
              openQty = openQty - allocateQty
              nextDay = 1
              Cells(rwHideCapacity, currentDay) = maxCapacity 'capacity full occupied
              capacityOccupied# = Cells(rwHideCapacity, currentDay + 1)
           End If
               
           'production Qty
           With Cells(rwMo, currentDay)
                .Value = allocateQty
                .Font.ColorIndex = 10
                .Interior.ColorIndex = colorID
           End With
           
           'dialy production Qty
           Cells(rwBottom + 1, currentDay) = Cells(rwBottom + 1, currentDay) + allocateQty
           'production Qty recorded
           Cells(rwMo, clPQ + 1) = currentDay
           Cells(rwMo, clPQ + 2) = allocateQty
           clPQ = clPQ + 2
           
           
           currentDay = currentDay + nextDay
        Loop Until openQty = 0
        
nextMo:
    Next rwMo
   
    'LOTS MO DEALING
'    For rwMo = rwMoStart To rwBottom
'        If Cells(rwMo, clLot) > 0 And _
'           Cells(rwMo, clInputQty) < Cells(rwMo, clLot) Then
'           mo = Cells(rwMo, clMoNo)
'           Set monos = Columns(clMoNo)
'           rw = Application.Match(mo, monos, 0)
'           If rw < rwMo Then
'              For i = clStartDay To clEndDay
'                  If Application.IsNumber(Cells(rwMo, i)) Then
'                     Cells(rw, i) = Cells(rw, i) + Cells(rwMo, i)
'                     Cells(rwMo, i) = "        ◆"
'                  End If
'              Next i
'           End If
'        End If
'    Next rwMo
        
    'check if capaicty over-loading
    For d = clStartDay To clEndDay
        Select Case Cells(rwDailyNote, d)
           
              Case Is = "0": maxCapacity = 0
              Case Is = "8": maxCapacity = 0.8
              Case Is = "10": maxCapacity = 1
              Case Is = "11": maxCapacity = 1.1
              Case Is = "12": maxCapacity = 1.2
              Case Is = "16": maxCapacity = 1.6
              Case Is = "18": maxCapacity = 1.8
              Case Is = "20": maxCapacity = 1.8
           Case Else: maxCapacity = 1
        End Select
        Set cell1 = Cells(rwDailyNote, d)
        Set cell2 = Cells(rwBottom, d)
        Set theDay = Range(cell1, cell2)
        Select Case Cells(rwHideCapacity, d)
           Case Is > maxCapacity: theDay.Interior.ColorIndex = 0
           Case Is < maxCapacity: theDay.Interior.ColorIndex = 0
           
           Case Else: theDay.Interior.ColorIndex = 0
        End Select
    Next d
        
    'un-Confirm mo
    'For rwMo = rwMoStart To rwBottom
    '    qid = clNote + 1
    '    Do Until IsEmpty(Cells(rwMo, qid))
    '       cl = CLng(Cells(rwMo, qid))
    '       If Not IsEmpty(Cells(rwMo, clUnConfirm)) Then
    '          Cells(rwMo, cl).Interior.ColorIndex = 35
    '       End If
    '       Cells(rwMo, qid) = Cells(rwDay, cl)
    '       qid = qid + 2
    '    Loop
    'Next rwMo
End Sub

TA的精华主题

TA的得分主题

发表于 2014-3-10 20:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常的不错,好好学习一下!

TA的精华主题

TA的得分主题

发表于 2014-3-11 10:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,在函数上的距离太大了,需要好好学习!

TA的精华主题

TA的得分主题

发表于 2014-3-15 14:14 | 显示全部楼层
下载了,看下,挺好的!
不知道老师能不能将前面的优先顺序也能考虑进去呢?

TA的精华主题

TA的得分主题

发表于 2014-3-16 13:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-22 00:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-22 10:06 | 显示全部楼层

又出新版本了,下载试用!

TA的精华主题

TA的得分主题

发表于 2014-3-24 21:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-25 12:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
什么是至柔II?不知哪位大侠能告诉小弟一下?感激涕零!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 11:38 , Processed in 0.048798 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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