ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 电子物料清单拆分异常,求帮忙

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-4-26 15:18 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最近忙于SMT编程,电子物料清单拆分遇到一点难题,求论坛大神老师帮忙解决,非常谢谢

物料清单分离程序.rar

33.6 KB, 下载次数: 47

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-4-26 19:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有没有大神老师帮忙修改里面错误的,非常感谢

TA的精华主题

TA的得分主题

发表于 2022-4-26 20:06 来自手机 | 显示全部楼层
select * from SMT电子物料清单拆分 limit 3; cli_split_data~SMT电子物料清单拆分~[、,;\s]~备注; create temp table aa as  select 代号,regreplace('[\~~]','-',备注) 备注 from SMT电子物料清单拆分split;  create temp table bb as  select 代号,备注,iif(instr(备注,'-')>0,regexp2('^[a-zA-Z]+',备注),'') 备注2,iif(instr(备注,'-')>0,regreplace('[a-zA-Z0]+','',备注),'') 备注3 from aa; create temp table cc as  select *,split_num(备注3) 连续 from bb; cli_split_data~cc~,~连续; create temp table dd as  select iif(备注2='',备注,printf(备注2||'%02d',连续)) 新备注,代号 from ccsplit; select regreplace('(?<=\D)\d(?=$)','0\0',新备注) 新备注,代号 from dd;
Screenshot_2022-04-26-20-04-02-367_io.github.excel.Ninja.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-4-26 21:12 | 显示全部楼层
本帖最后由 雪之花 于 2022-4-26 21:36 编辑
zpy2 发表于 2022-4-26 20:06
select * from SMT电子物料清单拆分 limit 3; cli_split_data~SMT电子物料清单拆分~[、,;\s]~备注; creat ...

大师的回复,有点看不懂啊,图片结果是对的

TA的精华主题

TA的得分主题

发表于 2022-4-27 08:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
雪之花 发表于 2022-4-26 21:12
大师的回复,有点看不懂啊,图片结果是对的

1651017624054.png
经供参考。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-4-27 23:47 | 显示全部楼层
论坛其他高手能否帮忙解答的,非常感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-4-28 18:58 | 显示全部楼层
zpy2 发表于 2022-4-26 20:06
select * from SMT电子物料清单拆分 limit 3; cli_split_data~SMT电子物料清单拆分~[、,;\s]~备注; creat ...

老师,请问你的代码如何可以实现我要的功能,可以指点下么,非常感谢

TA的精华主题

TA的得分主题

发表于 2022-4-29 15:58 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
雪之花 发表于 2022-4-28 18:58
老师,请问你的代码如何可以实现我要的功能,可以指点下么,非常感谢

5楼请参考一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-5-7 14:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
程序自己修改了下,结果备注栏单元格数字前带0的输出结果没有0,麻烦高手帮忙修改下,或者有好的代码提供下,万分感谢。

物料清单分离程序(修改版).rar

33.6 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2022-5-8 02:26 | 显示全部楼层
  1. Sub InfoList()
  2.     Dim vData As Variant, nRow As Long, nCol As Long, nI As Long, nJ As Long
  3.     Dim sConnect As String, dicConnectChar As Object
  4.     Dim nCodeCol As Long, nMemoCol As Long
  5.     Dim sMemo As String, sCode As String
  6.     Dim vDivide As Variant, sDivide As String, vConnect As Variant, sNum(1) As String, nLen As Long, nNum As Long, sSerial As String
  7.     Dim vFill As Variant, nFill As Long
  8.    
  9.     Set dicConnectChar = CreateObject("Scripting.Dictionary")
  10.     With Sheet2
  11.         nRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  12.         vData = .[A1:B1].Resize(nRow).Value
  13.         For nRow = 3 To UBound(vData)
  14.             If vData(nRow, 2) = "-" Then dicConnectChar(vData(nRow, 1)) = 0                '记录需要替换的相连符号
  15.         Next
  16.         sConnect = "" & Join(dicConnectChar.Keys(), "|") '组建正则查找字符对象
  17.    
  18.         nRow = .Cells(.Rows.Count, 5).End(xlUp).Row
  19.         vData = .[D1:E1].Resize(nRow).Value
  20.         nCodeCol = vData(3, 2) '代码列号
  21.         nMemoCol = vData(5, 2) '备注列号
  22.     End With
  23.    
  24.     With Sheet1
  25.         nRow = Application.WorksheetFunction.Min(.Cells(.Rows.Count, nCodeCol).End(xlUp).Row, .Cells(.Rows.Count, nMemoCol).End(xlUp).Row) '查找代码列、备注列的最小行数
  26.         nCol = Application.WorksheetFunction.Max(nCodeCol, nMemoCol) '查找代码列号、备注列号之中的最大数
  27.         vData = .[A1].Resize(nRow, nCol).Value
  28.         ReDim vFill(1 To 2, 0)
  29.         With CreateObject("Vbscript.RegExp")
  30.             .Global = True
  31.             .IgnoreCase = True
  32.             For nRow = 2 To UBound(vData)
  33.                 sCode = vData(nRow, nCodeCol)
  34.                 sMemo = vData(nRow, nMemoCol)
  35.                 .Pattern = "[" & sConnect & "]+"
  36.                 If .Test(sMemo) Then sMemo = .Replace(sMemo, "-") '替换相连符号为-号
  37.                 .Pattern = "[^\-\w\d]+"
  38.                 If .Test(sMemo) Then sMemo = .Replace(sMemo, ",") '替换非-号、非字母、非数字的符号为,号
  39.                 vDivide = Split(sMemo, ",") '分离各个分开的段
  40.                 For nI = LBound(vDivide) To UBound(vDivide)
  41.                     sDivide = vDivide(nI)
  42.                     vConnect = Split(sDivide, "-")
  43.                     .Pattern = "\d+$"
  44.                     sNum(0) = .Execute(vConnect(0))(0) '取最小序号部分
  45.                     nLen = Len(sNum(0))
  46.                     sSerial = Left(vConnect(0), Len(vConnect(0)) - nLen) '取非序号部分
  47.                     If UBound(vConnect) = 1 Then '说明有相连
  48.                         sNum(1) = .Execute(vConnect(1))(0) '取最大序号部分
  49.                     Else
  50.                         sNum(1) = sNum(0)
  51.                     End If
  52.                     For nNum = Val(sNum(0)) To Val(sNum(1))
  53.                         nFill = nFill + 1
  54.                         ReDim Preserve vFill(1 To 2, 1 To nFill)
  55.                         vFill(1, nFill) = sSerial & Right("00000" & nNum, nLen)
  56.                         vFill(2, nFill) = sCode
  57.                     Next
  58.                 Next
  59.             Next
  60.         End With
  61.         .[E:F].ClearContents
  62.         .[E1:F1].Resize(nFill) = Application.WorksheetFunction.Transpose(vFill)
  63.     End With
  64. End Sub
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-19 05:35 , Processed in 0.051219 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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