ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] [求助]如可开料, 最节省?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-21 01:10 | 显示全部楼层 |阅读模式

为环保, 为金钱, 请各位大侠帮忙

具体要求见附件

 

 

KGsmK1KK.rar (8.74 KB, 下载次数: 1100)


 

[em06][em06][em06]

TA的精华主题

TA的得分主题

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

此题如果要求到最优的结果,是有难度的,只能求到比较接近结果,虽然这样,都比较耗时耗力,建议做为下一期竟赛题.

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-21 14:18 | 显示全部楼层

感谢彭大师的回复

首先是看到EH另一同类帖, 感觉相当有意思及实用价值, 但专注了十多小时后,

所写的VBA洋洋万字, 几十个变量, 无数for循环及goto, if 更加不计其数, 连最初级的Cell. Select, Offset等我经常不愿用的语句都广泛被使用, 修修改改无数次, 经常进入死循环及死机, 速度亦相当慢, 最后感觉是无能为力, 才开此新帖求助。

此题尚有一难点, 是如何设计工作表, 以便程序易写及运行畅顺。

另一问题是数据会有巧合性的存在, 不同的已知数据, 及相同的已知数据但不相同的排序, 对运算速度及结果都会有所不同

附件的工作表环境亦是修改多次才完成, 不一定是最好

由于已专注此题相当长时间, 我当然希望能作为竞赛题, 望版主成全

TA的精华主题

TA的得分主题

发表于 2008-3-21 22:11 | 显示全部楼层

谢谢各位高手朋友们对我工作难题的关注,

在下感谢涕零。

特别感谢kowloon 朋友及版主的热心支持谢谢

TA的精华主题

TA的得分主题

发表于 2008-3-22 00:16 | 显示全部楼层
用规划求解功能或许会较好地解决这个问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-22 00:57 | 显示全部楼层
QUOTE:
以下是引用tangjie22345在2008-3-22 0:16:13的发言:
用规划求解功能或许会较好地解决这个问题

几乎没有正式使用过规划求解

但规划求解是需要公式的, 公式是什么呢? 如能编此公式, 简直是神

而且规划求解每次只填一个单元格, 相信远远不可能满足此题要求

TA的精华主题

TA的得分主题

发表于 2008-3-22 15:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Public arr2, yy
Sub peng()
    arr = Cells(5, 1).Resize(13, 2)
    x = [b3]
    y = 3
    Do
        y = y + 1
        arr1 = arr
        yy = 6300
        Call xi(arr1, 1, 6300)
        z = 0
        For i = 1 To 13
            Cells(i + 4, y) = arr(i, 2) - arr2(i, 2)
            z = z + arr2(i, 2)
        Next i
        If z = 0 Then Exit Sub
        arr = arr2
    Loop
End Sub

Sub xi(arr, x, y)
    If y < yy Then         '求最小值
        yy = y
        arr2 = arr
        If yy = 0 Then
            Exit Sub
        End If
    End If
    For i = x To 13
        If y - arr(i, 1) >= 0 Then
            If arr(i, 2) > 0 Then
                arr1 = arr
                arr1(i, 2) = arr1(i, 2) - 1
                Call xi(arr1, i, y - arr(i, 1))
            End If
        End If
    Next i
End Sub

试了一下,还没有人脑好使.代码有等优化

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-22 15:57 | 显示全部楼层

感谢彭大师的VBA代码

初步测试, 速度快, 结果正确, 省料程度差一点点

虽不是至优的结果, 但应用上已可接受

在下的程度无法实时理解vba内的语句及思路, 需要一些时间吸收

TA的精华主题

TA的得分主题

发表于 2008-3-22 21:52 | 显示全部楼层

其实后面还可以通过贪婪对数据进行修正,还是有望提高省料.

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-3-23 01:11 | 显示全部楼层

我的文件, 大致完成

不会彭版主的百子千孙, 宏中有宏的语法及大脑无法自然反射此类思路, 唯有用我个人惯常使用的初级土方法编写, 效果尚可接受, 速度及VBA的简洁性则笑大人个口。

贪婪对数应是大学数学系或计算器系程度, 对于我这个初中程度的老人家, 太高不可攀了

 

Sj0S6jXi.rar (29.6 KB, 下载次数: 995)


 

[em04]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 21:25 , Processed in 0.037927 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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