ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么根据模板和数据批量生成新的excel文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-11 16:44 | 显示全部楼层 |阅读模式
本帖最后由 justus8735 于 2014-12-11 16:48 编辑

因为工作的原因,需要把几千个客户的资料制作成相应的规定格式的excel文件。
现在手上有excel文件的模板,求教怎么批量生成。

就是说比如模板的D3要填姓名,数据的A列是姓名,然后把数据A列的内容填在D3处,然后其他的地方也是照这样对应。最后生成一个新的excel文件,新文件只有一个工作表,表名是相同的,文件名就是姓名。

需求.rar (124.78 KB, 下载次数: 244)


TA的精华主题

TA的得分主题

发表于 2014-12-11 16:52 | 显示全部楼层
这个我觉得有个比较简单的办法
你录一个宏,生成一个样本
然后把宏改一下,应该就可以了
你先试试

TA的精华主题

TA的得分主题

发表于 2014-12-11 17:07 | 显示全部楼层
试试看
  1. Sub TEST()

  2.     arr = Sheets("Sheet2").[a1].CurrentRegion
  3.     r = UBound(arr, 1)
  4.     For i = 2 To r
  5.         Sheets("指标new").Copy After:=Sheets(2)
  6.         With Sheets("指标new (2)")
  7.             .[E7] = arr(i, 1)
  8.             .[E8] = arr(i, 2)
  9.             .[E9] = arr(i, 3)
  10.             .[E13] = arr(i, 4)
  11.             .[E14] = arr(i, 5)
  12.             .[E15] = arr(i, 6)
  13.             .Name = arr(i, 1)
  14.         End With
  15.         
  16.     Next
  17.    
  18. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-11 17:18 | 显示全部楼层
dqhtju 发表于 2014-12-11 17:07
试试看

你好,谢谢您的指导。
确实是能生成新的sheet。
不过可能我没说清楚我的意思,我是想生成一个新的excel文件,文件只包括“指标new”这个sheet,然后文件名是姓名,sheet名还是“指标new”

谢谢您了~

TA的精华主题

TA的得分主题

发表于 2014-12-11 21:49 | 显示全部楼层
  1. Sub TEST()

  2.     arr = Sheets("Sheet2").[a1].CurrentRegion
  3.     r = UBound(arr, 1)
  4.     For i = 2 To r
  5.         With Sheets("指标new")
  6.             .[E7] = arr(i, 1)
  7.             .[E8] = arr(i, 2)
  8.             .[E9] = arr(i, 3)
  9.             .[E13] = arr(i, 4)
  10.             .[E14] = arr(i, 5)
  11.             .[E15] = arr(i, 6)
  12.         End With
  13.         Sheets("指标new").Copy
  14.         ActiveWorkbook.SaveAs Filename:="C:\Users\Administrator\Desktop" & arr(i, 1) & ".xlsx", _
  15.             FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
  16.         ActiveWindow.Close
  17.     Next
  18.    
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-11-15 12:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-11-15 13:24 | 显示全部楼层
通用型代码 把模板单独存为模板工作薄 然后打开数据源粘贴代码按操作提示进行就可以了 只需动动鼠标 接下来就自动运行等待结果
  1. Sub 批量导出到模板()
  2. Dim myPath, myName
  3. Dim arr As Variant
  4. Dim i, s As Integer, arr2(), arr1()
  5. Dim wb As Workbook
  6. Set Mapp = CreateObject("Shell.Application").BrowseForFolder(0, "请选择保存结果文件的存放目录:", &H1)
  7.     If Not Mapp Is Nothing Then
  8.         Directory = Mapp.self.Path
  9.     Else
  10.         MsgBox "你没有选择保存目录!": Exit Sub
  11.     End If
  12. Set zsj = Application.InputBox("请点选: 数据源中的任意非空单元格", Type:=8)
  13. Set zdm = Application.InputBox("请在该表中点选 或者框选匹配需要的: 字段名", Type:=8)
  14. zdmhh = Val(Application.InputBox("请输入字段名所处的行号 为数字型 1  2  3 ..."))
  15. arr = zsj.CurrentRegion.Offset(zdmhh - 1, 0)
  16. gzbm = Application.InputBox("请点选:以什么字段名来命名新工作簿", Type:=8)
  17. For Each zdm1 In zdm
  18. nn = nn + 1
  19. ReDim Preserve arr1(1 To nn)
  20. arr1(nn) = zdm1.Value
  21. Next
  22.     myPath = ThisWorkbook.Path & "\*.xls*"
  23.     myName = Dir(myPath)
  24.     Do While myName <> ""
  25.        If myName <> ThisWorkbook.Name Then mbbm = myName
  26.         myName = Dir()
  27.     Loop
  28. Set wb = Workbooks.Open(ThisWorkbook.Path & "" & mbbm)
  29. For Each Rng In arr1
  30.   tt = "原始数据中的  " & Rng & "  列匹配到模板中的对应位置:"
  31.    n = n + 1
  32.    If Rng = gzbm Then
  33.     bmxh = n
  34.    End If
  35. Set tishi = Application.InputBox(tt, Type:=8)
  36. ReDim Preserve arr2(1 To n)
  37. arr2(n) = tishi.Address(0, 0)
  38. Next Rng
  39.    Application.ScreenUpdating = False
  40.    Application.DisplayAlerts = False
  41. For i = 2 To UBound(arr)

  42.    With wb.Worksheets(1)
  43.    For j = 1 To UBound(arr2)
  44.     For k = 1 To UBound(arr, 2)
  45.      If arr1(j) = arr(1, k) Then
  46.        .Range(arr2(j)) = arr(i, j)
  47.      End If
  48.      Next
  49.    Next
  50. .Copy
  51. bm = arr(i, bmxh)
  52. If bm <> "" Then
  53.    ActiveWorkbook.SaveAs Filename:=Directory & "" & bm & ".xls"
  54.    End If
  55.    ActiveWorkbook.Close
  56. End With
  57. Next i
  58. wb.Close False
  59.   Application.DisplayAlerts = True
  60.   Application.ScreenUpdating = True
  61.   MsgBox "导出完毕!"
  62. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-11-17 19:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cjc209 发表于 2018-11-15 13:24
通用型代码 把模板单独存为模板工作薄 然后打开数据源粘贴代码按操作提示进行就可以了 只需动动鼠标 接下来 ...

空白模板和汇总好的信息放在同一个文件夹下?
数据源就是汇总好的信息?
点选或者框选匹配需要的字段名   是什么东西?

TA的精华主题

TA的得分主题

发表于 2020-1-12 01:01 | 显示全部楼层

Sheets("指标new").Copy After:=Sheets(2)
为什么上面sheets后括号里面填的是2呢?
有点想不明白,因为复制了指标new后,产生的新工作表指标new()括号中应该是一个会变的值。

TA的精华主题

TA的得分主题

发表于 2020-2-28 17:21 | 显示全部楼层
看题目 类似的问题是很多,只是高手解答太少了,希望多点简便易懂的答案。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 13:06 , Processed in 0.037718 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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