ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按送货日期、客户名称、送货单号拆分送货单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-30 15:58 | 显示全部楼层 |阅读模式
本帖最后由 jaxpqh 于 2024-5-2 14:18 编辑

  我这里有一个名叫《送货单》的工作簿,里面有一个名叫《出货表》的工作表,我的需求是按送货日期、客户名、送货单号进行拆分。
  1.VBA代码运行时,弹出对话框,要求手动输入要拆分的日期,默认日期为当日日期,如果是拆分当日日期的就不必输入,如果不是拆分当日日期的就手动修改为指定日期。
  2.拆分后的工作簿保存到一个名叫《送货单》的文件夹,不同的客户拆分为不同的工作簿,工作簿命名为“客户名称+拆分日期”;同一客户名称不同送货单号拆分为不同工作表,放入同一工作簿,工作表名称命名为“客户名称+送货单号”。《送货单》文件夹内有我期望拆分后的样表。
  3.同一日期如果运行代码拆分多次,那么后一次拆分的工作簿自动覆盖前一次拆分的工作簿。
  4.运行代码不使用“模板”表格,直接新建工作簿工作表,即工作表以不同的送货单号循环建立,工作簿以不同的客户名称循环建立。
  5.只要能拆分出相关内容即可,具体格式代码我可以自己弄。
  诚恳期望得到大师的慷慨相助,在此先说声谢谢!

拆分.rar

43.47 KB, 下载次数: 15

原始数据表

送货单.rar

46.79 KB, 下载次数: 0

加页面设置

TA的精华主题

TA的得分主题

发表于 2024-4-30 16:30 | 显示全部楼层
先做个记号

TA的精华主题

TA的得分主题

发表于 2024-4-30 16:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
关键字:into
GIF 2024-04-30 16-51-49.gif

拆分.zip

21.91 KB, 下载次数: 7

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 16:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub limonet()
    Dim Cn As Object, StrSQL$, Arr As Variant, i%, j%, D As Date
    D = Application.InputBox("请输入日期", , Date)
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    Arr = Cn.Execute("Select 客户名称,送货单号 From [出货表$] Where 送货日期=#" & D & "#  Group By 客户名称,送货单号").GetRows
    ReDim Preserve Arr(0 To 1, 0 To UBound(Arr, 2) + 1)
    For i = UBound(Arr, 2) - 1 To 0 Step -1
        If i = UBound(Arr, 2) - 1 Or Arr(0, i) <> Arr(0, i + 1) Then
            Cn.Close: Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=" & ThisWorkbook.Path & "\送货单\" & Arr(0, i) & D & ".xlsx"
        End If
        StrSQL = "Select * Into [" & Arr(0, i) & Arr(1, i) & "] From [Excel 12.0;DataBase=" & ThisWorkbook.FullName & "].[出货表$] Where 客户名称='" & Arr(0, i) & "' And 送货单号=" & Arr(1, i)
        Cn.Execute (StrSQL)
    Next i
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 17:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个蛮有意思的,跟我写的那个拆分差不多;

TA的精华主题

TA的得分主题

发表于 2024-4-30 19:39 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-4-30 19:40 编辑

附件供参考。。。

拆分.7z

28.71 KB, 下载次数: 27

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 19:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ykcbf1100 于 2024-4-30 20:13 编辑

参与一下。。。

  1. Sub ykcbf()   '//2024.4.30
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Set ws = ThisWorkbook
  6.     p = ws.Path & "\送货单"
  7.     If Dir(p, vbDirectory) = "" Then MkDir p
  8.     Set sh = ws.Sheets("出货表")
  9.     today = Format(CDate(Date), "yyyy/m/d")
  10.     rq = Application.InputBox("请输入日期:", "日期输入", today)
  11.     bt = 1        '//标题行数
  12.     col = 3
  13.     With sh
  14.         r = .Cells(Rows.Count, col).End(3).Row
  15.         arr = .[a1].Resize(r, 12)
  16.     End With
  17.     For i = bt + 1 To UBound(arr)
  18.         If DateValue(arr(i, 2)) = DateValue(rq) Then
  19.             s = arr(i, col): ss = arr(i, 1)
  20.             If Not d.exists(s) Then Set d(s) = CreateObject("Scripting.Dictionary")
  21.             If Not d(s).exists(ss) Then Set d(s)(ss) = CreateObject("Scripting.Dictionary")
  22.             d(s)(ss)(i) = i
  23.         End If
  24.     Next
  25.     On Error Resume Next
  26.     For Each k In d.keys
  27.         Application.SheetsInNewWorkbook = d(k).Count
  28.         Set wb = Workbooks.Add
  29.         n = 0
  30.         For Each kk In d(k).keys
  31.             If kk <> Empty Then
  32.                 n = n + 1
  33.                 Set sht = wb.Sheets(n)
  34.                 ws.Sheets("模板").Cells.Copy sht.[a1]
  35.                 m = 0: Sum = 0
  36.                 ReDim brr(1 To 10, 1 To 6)
  37.                 With sht
  38.                     .Name = k & kk
  39.                     .[a2] = "  送货单号:" & kk
  40.                     .[a3] = "  客户名称:" & k
  41.                     .[e2] = "送单日期:" & Format(rq, "yyyy年m月d日")
  42.                     .[E3] = "制单日期:" & Format(Date, "yyyy年m月d日")
  43.                     For Each kkk In d(k)(kk).keys
  44.                         m = m + 1
  45.                         For j = 4 To 8
  46.                             brr(m, j - 3) = arr(kkk, j)
  47.                             Sum = Sum + brr(m, 5)
  48.                         Next
  49.                         brr(m, 6) = arr(kkk, 12)
  50.                     Next
  51.                     .[b5].Resize(m, 6) = brr
  52.                     .Cells(13, "f") = Sum
  53.                 End With
  54.             End If
  55.         Next
  56.    
  57.         wb.SaveAs p & k & "(" & Format(rq, "yyyy年m月d日") & ")"
  58.         wb.Close 1
  59.     Next
  60.     Set d = Nothing
  61.     Application.ScreenUpdating = True
  62.     MsgBox "拆分完毕!"
  63. End Sub

复制代码


评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 20:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
长度不够不让发

送货单.zip

27.74 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-30 21:17 | 显示全部楼层
本帖最后由 jaxpqh 于 2024-4-30 21:18 编辑

  谢谢您的无私帮助,有一个需求(如下图)您可能没注意到。恳求您改一改代码,满足我这个需求。谢谢您了!
无标题.png

TA的精华主题

TA的得分主题

发表于 2024-4-30 22:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Application.ScreenUpdating = False
  6.     Application.DisplayAlerts = False
  7.     Set d = CreateObject("scripting.dictionary")
  8.     lk = Array(4, 32, 6, 8.13, 5.88, 10, 17)
  9.     rq0 = Application.InputBox(prompt:="请输入送货日期(格式为:yyyymmdd)", Title:="操作提示", Default:=Format(Date, "yyyymmdd"), Type:=2)
  10.     If Not IsDate(Format(rq0, "0000-00-00")) Then
  11.         MsgBox "非规日期!"
  12.         Exit Sub
  13.     End If
  14.     rq = CDate(Format(rq0, "0000-00-00"))
  15.     If Dir(ThisWorkbook.Path & "\送货单", vbDirectory) = "" Then
  16.         MkDir ThisWorkbook.Path & "\送货单"
  17.     End If
  18.     With ThisWorkbook.Worksheets("出货表")
  19.         .AutoFilterMode = False
  20.         r = .Cells(.Rows.Count, 1).End(xlUp).Row
  21.         arr = .Range("a2:l" & r)
  22.     End With
  23.     For i = 1 To UBound(arr)
  24.         If arr(i, 2) = rq Then
  25.             If Not d.exists(arr(i, 3)) Then
  26.                 Set d(arr(i, 3)) = CreateObject("scripting.dictionary")
  27.             End If
  28.             If Not d(arr(i, 3)).exists(arr(i, 1)) Then
  29.                 Set d(arr(i, 3))(arr(i, 1)) = CreateObject("scripting.dictionary")
  30.             End If
  31.             d(arr(i, 3))(arr(i, 1))(i) = Empty
  32.         End If
  33.     Next
  34.     For Each aa In d.keys
  35.         Application.SheetsInNewWorkbook = d(aa).Count
  36.         Set wb = Workbooks.Add
  37.         p = 0
  38.         With wb
  39.             For Each bb In d(aa).keys
  40.                 p = p + 1
  41.                 With .Worksheets(p)
  42.                     .Name = aa & bb
  43.                     ReDim brr(1 To d(aa)(bb).Count, 1 To 7)
  44.                     M = 0
  45.                     For Each cc In d(aa)(bb).keys
  46.                         M = M + 1
  47.                         brr(M, 1) = M
  48.                         brr(M, 2) = arr(cc, 4)
  49.                         brr(M, 3) = arr(cc, 5)
  50.                         brr(M, 4) = arr(cc, 6)
  51.                         brr(M, 5) = arr(cc, 7)
  52.                         brr(M, 6) = arr(cc, 8)
  53.                         brr(M, 7) = arr(cc, 12)
  54.                     Next
  55.                     With .Range("a1")
  56.                         .Value = "送货单"
  57.                         .Resize(1, 7).Merge
  58.                         With .Font
  59.                             .Name = "Times New Roman"
  60.                             .Size = 20
  61.                         End With
  62.                         .HorizontalAlignment = xlCenter
  63.                         .VerticalAlignment = xlCenter
  64.                     End With
  65.                     .Rows(1).RowHeight = 45
  66.                     With .Range("a2")
  67.                         .Value = "  送货单号:" & bb
  68.                         .Resize(1, 4).Merge
  69.                     End With
  70.                     With .Range("e2")
  71.                         .Value = "送单日期:" & Format(rq, "yyyy年m月d日")
  72.                         .Resize(1, 3).Merge
  73.                     End With
  74.                     With .Range("a3")
  75.                         .Value = "  客户名称:" & aa
  76.                         .Resize(1, 4).Merge
  77.                     End With
  78.                     With .Range("e3")
  79.                         .Value = "制单日期:" & Format(Date, "yyyy年m月d日")
  80.                         .Resize(1, 3).Merge
  81.                     End With
  82.                     With .Range("a2:g3")
  83.                         With .Font
  84.                             .Name = "Times New Roman"
  85.                             .Size = 10
  86.                             .Bold = True
  87.                         End With
  88.                     End With
  89.                     With .Range("a2:d3")
  90.                         .HorizontalAlignment = xlLeft
  91.                         .VerticalAlignment = xlCenter
  92.                     End With
  93.                     With .Range("e2:g3")
  94.                         .HorizontalAlignment = xlCenter
  95.                         .VerticalAlignment = xlCenter
  96.                     End With
  97.                     With .Range("a4:g4")
  98.                         .Borders.LineStyle = xlContinuous
  99.                         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
  100.                         .Value = Array("序号", "产品名称及型号", "单位", "数量", "单价", "金额", "备注")
  101.                         .Font.Bold = True
  102.                         .HorizontalAlignment = xlCenter
  103.                         .VerticalAlignment = xlCenter
  104.                     End With
  105.                     With .Range("a5").Resize(UBound(brr), UBound(brr, 2))
  106.                         .Value = brr
  107.                         .Borders.LineStyle = xlContinuous
  108.                         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
  109.                         .HorizontalAlignment = xlCenter
  110.                         .VerticalAlignment = xlCenter
  111.                     End With
  112.                     With .Cells(4 + UBound(brr) + 1, 1)
  113.                         .Value = "  合计人民币金额(大写):" & dx(Application.Sum(Application.Index(brr, 0, 6)))
  114.                         .Resize(1, 5).Merge
  115.                         With .Font
  116.                             .Bold = True
  117.                         End With
  118.                         .HorizontalAlignment = xlLeft
  119.                         .VerticalAlignment = xlCenter
  120.                     End With
  121.                     With .Cells(4 + UBound(brr) + 1, 6)
  122.                         .Value = Application.Sum(Application.Index(brr, 0, 6))
  123.                         .Resize(1, 2).Merge
  124.                         .HorizontalAlignment = xlCenter
  125.                         .VerticalAlignment = xlCenter
  126.                         .NumberFormatLocal = "0.00"
  127.                     End With
  128.                     With .Cells(4 + UBound(brr) + 1, 1).Resize(1, 7)
  129.                         .Borders.LineStyle = xlContinuous
  130.                         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
  131.                         .Font.Bold = True
  132.                     End With
  133.                     With .Range("a4").Resize(1 + UBound(brr) + 1, UBound(brr, 2))
  134.                        With .Font
  135.                             .Name = "Times New Roman"
  136.                             .Size = 10
  137.                         End With
  138.                     End With
  139.                     With .Cells(4 + UBound(brr) + 1 + 2, 1)
  140.                         .Value = "    注:请收到本单后三日内核对,如有差异请告之,逾期以本单为准。"
  141.                         .Resize(1, 7).Merge
  142.                         With .Font
  143.                             .Name = "Times New Roman"
  144.                             .Size = 10
  145.                         End With
  146.                         .HorizontalAlignment = xlLeft
  147.                         .VerticalAlignment = xlCenter
  148.                         
  149.                     End With
  150.                     With .Cells(4 + UBound(brr) + 1 + 3, 1)
  151.                         .Value = Space(150) & "客户确认(签名):"
  152.                         .Resize(1, 7).Merge
  153.                         With .Font
  154.                             .Name = "Times New Roman"
  155.                             .Size = 10
  156.                         End With
  157.                         .HorizontalAlignment = xlLeft
  158.                         .VerticalAlignment = xlCenter
  159.                     End With
  160.                     .Rows(2).Resize(3 + UBound(brr) + 4).RowHeight = 15.75
  161.                     For j = 0 To UBound(lk)
  162.                         .Columns(j + 1).ColumnWidth = lk(j)
  163.                     Next
  164.                 End With
  165.             Next
  166.             .SaveAs Filename:=ThisWorkbook.Path & "\送货单" & aa & "(" & Format(rq, "yyyy年m月d日") & ")"
  167.             .Close False
  168.         End With
  169.     Next
  170.     Application.ScreenUpdating = True
  171.     MsgBox "数据拆分完毕!"
  172. End Sub
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-21 06:46 , Processed in 0.050656 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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