1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 紧急求助,余料匹配,有哪位大神能帮帮我,每次手动计算非常困难

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-3-7 10:26 | 显示全部楼层 |阅读模式
1、优先匹配库存同规格余料,比如规格100*10,要生产0.45米的3根,可以匹配余料中同规格100*10中1米的库存1根+库存100*10中0.65米1根
2、最后统计汇总列出剩余的未匹配上的规格及米数得出需要再次采购的量


这是项目用量和库存余量

这是项目用量和库存余量

余料匹配.zip

7.08 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2025-3-7 13:04 | 显示全部楼层
image.png

不知道对不对了

用py写的
  1. from collections import deque
  2. import xlwings as xl
  3. from itertools import groupby
  4. from math import ceil

  5. wb = xl.Book("余料匹配.xls")
  6. sht = wb.sheets[0]
  7. kc = sorted(sht.range("d3").expand().value, key=lambda x: (x[0], x[1]))
  8. dic = {}
  9. for row in kc:
  10.     dic.setdefault(row[0], deque()).append(row)


  11. def find_liao(row, dic):
  12.     """给一行记录, 去库存字典里自动找库存函数
  13.     :row -> 一行记录
  14.     :dic -> 库存字典
  15.     :return -> 使用库存记录和剩余数量
  16.     """
  17.     key = row[0]
  18.     dq = dic[key]
  19.     guige = row[1]
  20.     num = row[2]
  21.     yong = []  # 使用库存的数据
  22.     res = []
  23.     for _ in range(len(dq)):
  24.         temp = dq.popleft()
  25.         if temp[1] < guige:  # 如果规格太小了就直接从右边回去
  26.             dq.append(temp)
  27.             continue
  28.         kc_num = temp[2]
  29.         kc_guige = temp[1]
  30.         max_num = kc_guige // guige * kc_num  # 最大的根数

  31.         # 分三个情况
  32.         if max_num == num:  # 完全相等正好用了
  33.             yong.append("-".join(map(str, temp)))
  34.             num = 0
  35.             break
  36.         if max_num < num:  # 不够解决问题的时候, 全部要给使用, 不用再返回库存
  37.             yong.append("-".join(map(str, temp)))
  38.             num = num - max_num  # 需要的数据更新下
  39.         if max_num > num:  # 够的情况, 但是要返回库存一部分数据
  40.             n = ceil(num / (kc_guige // guige))  # 需要多少根
  41.             temp[2] = kc_num - n  # 库存剩余数量
  42.             yong.append("-".join(map(str, [key, kc_guige, n])))  # 使用记录
  43.             if temp[2] != 0:
  44.                 dq.append(temp)  # 如果剩余就更新下库存
  45.             num = 0
  46.             break
  47.     return "\n".join(yong), num  # 返回文本库存使用记录, 和剩余数量


  48. kc = sorted(sht.range("d3").expand().value, key=lambda x: (x[0], x[1]))
  49. dic = {}
  50. for row in kc:
  51.     dic.setdefault(row[0], deque()).append(row)
  52. data = sht.range("a3").resize(len(kc), 3).value
  53. # 先处理一个的逻辑
  54. for row in data:
  55.     s, n = find_liao((row), dic)
  56.     row.extend([s, n])
  57. wb.sheets[1].range("a2").expand().clear_contents()
  58. wb.sheets[1].range("a2").value = data


  59. # 写入库存剩余数量
  60. res = []
  61. for k, v in dic.items():
  62.     if len(v) > 0:
  63.         for row in v:
  64.             res.append(row)
  65. wb.sheets[1].range("g2").expand().clear_contents()
  66. wb.sheets[1].range("g2").value = res
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-7 13:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-7 14:16 | 显示全部楼层
lyfegf 发表于 2025-3-7 13:04
不知道对不对了

用py写的

这PY代码怎么运行呀,求助呀。看大神你截图的运行结果,非常好。但我不会操作,求助!!!非常感谢大神的帮助!!!

TA的精华主题

TA的得分主题

发表于 2025-3-7 14:20 | 显示全部楼层
王纪根 发表于 2025-3-7 14:16
这PY代码怎么运行呀,求助呀。看大神你截图的运行结果,非常好。但我不会操作,求助!!!非常感谢大神的 ...

安装PY就行了哇,代码直接写到文本文件,扩展名.py好像

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-7 14:24 | 显示全部楼层
大灰狼1976 发表于 2025-3-7 14:20
安装PY就行了哇,代码直接写到文本文件,扩展名.py好像

版主大神你好,这可以改成在EXCEL表上,直接点个按钮运行吗?能在表上直接操作的那种?

TA的精华主题

TA的得分主题

发表于 2025-3-7 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
王纪根 发表于 2025-3-7 14:24
版主大神你好,这可以改成在EXCEL表上,直接点个按钮运行吗?能在表上直接操作的那种?

我都看不明白代码
论坛有个帖子一维下料的你也可以看看是否适用

TA的精华主题

TA的得分主题

发表于 2025-3-7 14:57 | 显示全部楼层
试一试手工排料,大概可以行得通。下一步可尝试用VBA自动完成,但逻辑有些复杂。

余料匹配.rar (52.66 KB, 下载次数: 9)

image.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-7 15:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lyfegf 发表于 2025-3-7 13:04
不知道对不对了

用py写的

大神有空看到,教我下怎么运行可以吗? 您这PY写的得出的结果非常好。就是我不会用

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-7 16:04 | 显示全部楼层
1、优先匹配库存同规格余料,比如规格100*10,要生产0.45米的3根,可以匹配余料中同规格100*10中1米的库存1根+库存100*10中0.65米1根 2、最后统计汇总列出剩余的未匹配上的规格及米数得出需要再次采购的量
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-3-27 22:28 , Processed in 0.026519 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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