ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

多条拉,多产品,多班次,不同产能自动排产求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-31 10:19 | 显示全部楼层
把存当天最大产能的数组(brr)计算得出就可以,按照小时产能*当日工作总工时,

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 10:49 | 显示全部楼层
longwin 发表于 2024-5-31 10:19
把存当天最大产能的数组(brr)计算得出就可以,按照小时产能*当日工作总工时,

老师您好,这行(第6行)请忽略,应该从V8:V13取数,AI12之后的单元格是错误的(原因是D8:DN换了机型引起了工时变化)。


PC计划2.rar

25.47 KB, 下载次数: 6

888888

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 10:56 | 显示全部楼层
longwin 发表于 2024-5-31 10:19
把存当天最大产能的数组(brr)计算得出就可以,按照小时产能*当日工作总工时,

好像是可以算出来。只要更改行6的综合最大产能就可以用了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 16:36 | 显示全部楼层
学习了下写VBA  我太难了  求老师帮我改:
Sub 产能分配()
Dim ARR, BRR, CRR, I As Integer, J As Integer, irow%, icol%, f(1 To 25)
irow = Range("b65536").End(xlUp).Row
icol = Cells(1, Columns.Count).End(xlToLeft).Column
ARR = Range(Cells(1, 22), Cells(1, icol)) '端子组总工时入横向数组
BRR = Range(Cells(2, 22), Cells(2, icol))  '成型组总工时入横向数组
CRR = Range("m12:v" & irow) '组别入竖向数组
Dim sum As Double
Set d = CreateObject("Scripting.Dictionary")
   For J = 3 To 3 'irow - 11
     If CRR(J, 1) = "端子组" Then
        For I = 1 To icol - 23
            f(I) = CRR(J, 10) * ARR(1, I + 2)
            sum = sum + f(I)
                If CRR(J, 7) - sum > 0 And CRR(J, 7) - sum >= f(I) Then
                 f(I) = f(I)
                Else
                    If CRR(J, 7) - sum > 0 And CRR(J, 7) - sum < f(I) Then
                    f(I) = CRR(J, 7) - sum
                    Else
                    f(I) = ""
                    End If
                End If
        Next
         Range(Cells(14, 24), Cells(14, icol)) = (f) ' WorksheetFunction.Transpose(f)
    Else
'       ff(J) = CRR(J, 10) * BRR(1, J)
        For I = 1 To icol - 23
            f(I) = CRR(J, 10) * ARR(2, I + 2)
            sum = sum + f(I)
                If CRR(J, 7) - sum > 0 And CRR(J, 7) - sum >= f(I) Then
                 f(I) = f(I)
                Else
                    If CRR(J, 7) - sum > 0 And CRR(J, 7) - sum < f(I) Then
                    f(I) = CRR(J, 7) - sum
                    Else
                    f(I) = ""
                    End If
                End If
        Next
     End If
   Next
   icol2 = Cells(14, 24).End(xlToRight).Column
   Range(Cells(15, icol2), Cells(15, icol)) = (f) ' WorksheetFunction.Transpose(f)
End Sub

PC计划y新学生 求帮忙改下我的代码.rar

28.35 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-5-31 16:44 | 显示全部楼层
居然有人写出来了,也学习下别人优秀的案例

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-31 16:49 | 显示全部楼层
LIUZHU 发表于 2024-5-31 16:44
居然有人写出来了,也学习下别人优秀的案例

大侠圣  见笑了 自已瞎弄的  弄不下去了。

TA的精华主题

TA的得分主题

发表于 2024-6-1 15:46 | 显示全部楼层
jerry3770 发表于 2024-5-31 16:36
学习了下写VBA  我太难了  求老师帮我改:
Sub 产能分配()
Dim ARR, BRR, CRR, I As Integer, J As Integ ...

以下供参考,可以两个组一起排出来了
Sub pc()
Set sh = ActiveSheet
c = sh.[X1].End(xlToRight).Column
l = sh.[a10].End(xlDown).Row
gsr = sh.Range(sh.Cells(1, 1), sh.Cells(2, c))  '每日工时
arr = sh.Range(sh.Cells(10, 1), sh.Cells(l, c))
ReDim brr(1 To UBound(gsr, 1), 1 To UBound(gsr, 2))   '存放每天最大产能

    For i = 1 To UBound(arr)     '搭建brr(每日最大产能)
        bzgs = arr(i, 12) '标准工时
        If arr(i, 13) = "端子组" Then k = 1
        If arr(i, 13) = "成型组" Then k = 2
        rysl = gsr(k, 22)
        For j = 24 To c
            brr(k, j) = bzgs * rysl * gsr(k, j)
        Next
    Next
   
For i = 1 To UBound(arr)
        sl = arr(i, 19)  '未排产数量
        If arr(i, 13) = "端子组" Then k = 1
        If arr(i, 13) = "成型组" Then k = 2
        For j = 24 To c
            If sl = 0 Then Exit For
            If sl > brr(k, j) Then      '未排产数量 > 当天最大产能
                arr(i, j) = brr(k, j)       '当天按照最大产能排产
                sl = sl - brr(k, j)         '未排产数量=未排产数量-当天最大产能
                brr(k, j) = 0               '将当天剩余最大产能为0
            Else                              '如果未排产数量 <=当天最大产能
                arr(i, j) = sl                '安排剩余数量
                brr(k, j) = brr(k, j) - sl '当天剩余产能
                sl = 0
            End If
        Next
    Next
sh.Range(sh.Cells(10, 1), sh.Cells(l, c)) = arr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-2 11:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-3 09:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
longwin 发表于 2024-6-1 15:46
以下供参考,可以两个组一起排出来了
Sub pc()
Set sh = ActiveSheet

老师谢谢您,现有品种验证结果是正确。晚点我再验证下!强!!!赞!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-3 15:08 | 显示全部楼层
longwin 发表于 2024-6-1 15:46
以下供参考,可以两个组一起排出来了
Sub pc()
Set sh = ActiveSheet

Range(sh.Cells(10, 1), sh.Cells(l, c)) = arr
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:23 , Processed in 0.036887 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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