ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 数据总表按模版拆分

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-10 11:51 | 显示全部楼层 |阅读模式
请教各位老师,给做个程序,数据表2表3的数据,按模版格式拆分,生成按业户名称命名的PDF文件,拆分时自动新建文件夹,把生成的新文件按放到文件夹里
1.png
2.png

月统计表01.rar

24.09 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-7-10 12:31 | 显示全部楼层
表2和表3中业户名称是否一致的?你模版表中把表2和表3的数据合到一起去了,如果二表业户不一致,不知道按哪个表为准了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 12:33 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 12:31
表2和表3中业户名称是否一致的?你模版表中把表2和表3的数据合到一起去了,如果二表业户不一致,不知道按哪 ...

业户名称是一致的,按表2的为准

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 12:47 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 12:31
表2和表3中业户名称是否一致的?你模版表中把表2和表3的数据合到一起去了,如果二表业户不一致,不知道按哪 ...

委托车辆属实风险统计及上月同比情况是取表3数据,其他项都是取表2数据
3.png

TA的精华主题

TA的得分主题

发表于 2024-7-10 13:03 | 显示全部楼层
写这个比较耗时,表2比较简单,先完成了吧。表3再说吧。




月统计表01.rar

24.09 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-10 13:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
模板表不太规范,写起来比较累。

  1. Sub ykcbf()   '//2024.7.10   表2部分
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Set fso = CreateObject("Scripting.FileSystemObject")
  6.     p = ThisWorkbook.Path & ""
  7.     p1 = p & "PDF目录"
  8.     If Not fso.FolderExists(p1) Then fso.CreateFolder p1
  9.     Set sh = ThisWorkbook.Sheets("模版")
  10.     With Sheets("Sheet2")
  11.         r = .Cells(Rows.Count, 1).End(3).Row
  12.         c = .UsedRange.Columns.Count
  13.         arr = .[a1].Resize(r, c)
  14.     End With
  15.     For i = 2 To UBound(arr)
  16.         s = arr(i, 1)
  17.         d(s) = ""
  18.     Next
  19.     For Each k In d.keys
  20.         sh.Copy
  21.         Set wb = ActiveWorkbook
  22.         m = 0
  23.         ReDim brr(1 To r, 1 To 20)
  24.         With wb.Sheets(1)
  25.             .Name = k
  26.             .[a1] = "【" & k & "】动态监控工作台账"
  27.             For i = 2 To UBound(arr)
  28.                 s = arr(i, 1)
  29.                 If s = k Then
  30.                     m = m + 1
  31.                     brr(m, 1) = m
  32.                     brr(m, 2) = arr(i, 2)
  33.                     brr(m, 3) = arr(i, 3)
  34.                     brr(m, 5) = arr(i, 4)
  35.                     brr(m, 7) = arr(i, 5)
  36.                     brr(m, 8) = arr(i, 6)
  37.                     brr(m, 9) = arr(i, 7)
  38.                     brr(m, 10) = arr(i, 8)
  39.                     brr(m, 11) = arr(i, 9)
  40.                     brr(m, 13) = arr(i, 10)
  41.                     brr(m, 15) = arr(i, 11)
  42.                 End If
  43.             Next
  44.             If m > 5 Then
  45.                 For x = 1 To m - 5
  46.                     .Cells(11 + x, 1).EntireRow.Insert
  47.                 Next
  48.             End If
  49.             .Cells(10, 1).Resize(m, 15) = brr
  50.             .ExportAsFixedFormat Type:=xlTypePDF, Filename:=p1 & k & ".PDF"
  51.         End With
  52.         wb.Close
  53.     Next
  54.     Application.ScreenUpdating = True
  55.     MsgBox "OK!"
  56. End Sub

复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 13:38 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 13:03
写这个比较耗时,表2比较简单,先完成了吧。表3再说吧。

非常感谢老师鼎力相助,神速这么快就写好了,再次谢过老师

TA的精华主题

TA的得分主题

发表于 2024-7-10 15:48 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-7-10 17:25 编辑

好了,全部完成了。
注意:表2和表3数据要每行对应,因为处置类型只有表2中有,而风险预警统计的是表3的数据。

附件已更新。。。


月统计表.zip

530.65 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-7-10 15:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ykcbf1100 于 2024-7-10 17:25 编辑

全部代码如下:
  1. Sub ykcbf()   '//2024.7.10
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Set fso = CreateObject("Scripting.FileSystemObject")
  6.     p = ThisWorkbook.Path & ""
  7.     p1 = p & "PDF目录"
  8.     If Not fso.FolderExists(p1) Then fso.CreateFolder p1
  9.     Set sh = ThisWorkbook.Sheets("模版")
  10.     fn = Format(sh.[a2].Value, "yyyy-m")
  11.     With Sheets("Sheet2")
  12.         r = .Cells(Rows.Count, 1).End(3).Row
  13.         c = .UsedRange.Columns.Count
  14.         arr = .[a1].Resize(r, c)
  15.     End With
  16.     For i = 2 To UBound(arr)
  17.         s = arr(i, 1)
  18.         d(s) = ""
  19.     Next
  20.     With Sheets("Sheet3")
  21.         rr = .Cells(Rows.Count, 1).End(3).Row
  22.         cc = .UsedRange.Columns.Count
  23.         zrr = .[a1].Resize(rr, cc)
  24.     End With
  25.     b = Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 12, 14, 15, 2)
  26.     bb = [{7,5,10,4,6,11,9,8}]
  27.     For Each k In d.keys
  28.         sh.Copy
  29.         Set wb = ActiveWorkbook
  30.         m = 0
  31.         ReDim brr(1 To r, 1 To 20)
  32.         With wb.Sheets(1)
  33.             .Name = k
  34.             .[a1] = "【" & k & "】动态监控工作台账"
  35.             .DrawingObjects.Delete
  36.             For i = 2 To UBound(arr)
  37.                 s = arr(i, 1)
  38.                 If s = k Then
  39.                     m = m + 1
  40.                     brr(m, 1) = m
  41.                     brr(m, 2) = arr(i, 2)
  42.                     brr(m, 3) = arr(i, 3)
  43.                     brr(m, 5) = arr(i, 4)
  44.                     brr(m, 7) = arr(i, 5)
  45.                     brr(m, 8) = arr(i, 6)
  46.                     brr(m, 9) = arr(i, 7)
  47.                     brr(m, 10) = arr(i, 8)
  48.                     brr(m, 11) = arr(i, 9)
  49.                     brr(m, 13) = arr(i, 10)
  50.                     brr(m, 15) = arr(i, 11)
  51.                 End If
  52.             Next
  53.             If m > 5 Then
  54.                 For x = 1 To m - 5
  55.                     .Cells(11 + x, 1).EntireRow.Insert
  56.                 Next
  57.             End If
  58.             .Cells(10, 1).Resize(m, 15) = brr
  59.             .Cells(10, 1).Resize(IIf(m < 5, 5, m), 15).WrapText = True
  60.             .Rows(10 & ":" & IIf(m < 5, 5, m) + 9).RowHeight = 30
  61.             .Rows("10:10").Copy
  62.             .Rows("11:" & IIf(m < 5, 5, m) + 9).PasteSpecial Paste:=xlPasteFormats
  63.             Application.CutCopyMode = False
  64.             n = 0
  65.             ReDim crr(1 To 100, 1 To 15)
  66.             ReDim l(1 To 10)
  67.             For i = 2 To UBound(zrr)
  68.                 If zrr(i, 2) = Empty Then zrr(i, 2) = zrr(i - 1, 2)
  69.                 If zrr(i, 14) = Empty Then zrr(i, 14) = zrr(i - 1, 14)
  70.                 If zrr(i, 15) = Empty Then zrr(i, 15) = zrr(i - 1, 15)
  71.                 If zrr(i, 1) = k Then
  72.                     n = n + 1
  73.                     crr(n, 1) = n
  74.                     For y = 0 To UBound(b)
  75.                         crr(n, y + 2) = zrr(i, b(y))
  76.                     Next
  77.                     l(1) = l(1) + IIf(arr(i, 8) = "设备误报", 1, 0)
  78.                     l(2) = l(2) + IIf(arr(i, 8) = "风险属实", 1, 0)
  79.                     For j = 1 To UBound(bb)
  80.                         If arr(i, 8) = "风险属实" Then
  81.                             l(j + 2) = l(j + 2) + zrr(i, bb(j))
  82.                         End If
  83.                     Next
  84.                 End If
  85.             Next
  86.             r1 = .UsedRange.Find("委托车辆属实风险统计及上月同比情况").Row
  87.             If n > 3 Then
  88.                 For x = 1 To n - 3
  89.                     .Cells(r1 + 2 + x, 1).EntireRow.Insert
  90.                 Next
  91.             End If
  92.             .Cells(r1 + 2, 1).Resize(n, 15) = crr
  93.             .Cells(r1 + 2, 1).Resize(IIf(n < 3, 3, n), 15).WrapText = True
  94.             .Rows(r1 + 2 & ":" & r1 + 1 + IIf(n < 3, 3, n)).RowHeight = 30
  95.             .Rows(r1 + 2 & ":" & r1 + 2).Copy
  96.             .Rows(r1 + 3 & ":" & r1 + 1 + IIf(n < 3, 3, n)).PasteSpecial Paste:=xlPasteFormats
  97.             Application.CutCopyMode = False
  98.             r2 = .Columns(2).Find("风险预警").Row
  99.             .Cells(r2, 3) = "当月处置省智能监管系统各类风险预警(" & n & ")宗,经核实,设备误报(" & l(1) & ")宗;属实风险(" & l(2) & ")宗。其中,属实的风险预警中,接打电话(" & l(3) & ")宗,抽烟(" & l(4) & ")宗,玩手机(" & l(5) & ")宗,超速(" & l(6) & ")宗,超时驾驶(" & l(7) & ")宗,未系安全带(" & l(8) & ")宗,双手脱靶(" & l(9) & ")宗,设备遮挡失效(" & l(10) & ")宗"
  100.             .ExportAsFixedFormat Type:=xlTypePDF, Filename:=p1 & fn & k & ".PDF"
  101.         End With
  102.         wb.Close
  103.     Next
  104.     Application.ScreenUpdating = True
  105.     MsgBox "OK!"
  106. End Sub

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 16:14 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 15:48
好了,全部完成了。
注意:表2和表3数据要每行对应,因为处置类型只有表2中有,而风险预警统计的是表3的数 ...

太感谢老师了,运行速度很快,这个表的这几个单元格合并有的问题,在麻烦老师给看看,
10.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 01:38 , Processed in 0.047322 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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