ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 如何拆分总表数据为一个个分表(或者将总表数据实现指定格式的批量打印)【已解决....

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-7 12:14 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 babol 于 2023-11-8 10:41 编辑

【已解决,经过老师们指点,用word邮件合并结合Excel数据即可,具体实操看楼下】


目的:把这张总表中的5户人,分别导入到分表格式中,分5个工作表并打印(上传了5个例子,我有几百份数据需要处理)。
也可以不生成5张分表,能打印出来就好。总表和分表数据基本一一对应,但是一个横排,一个竖排。以分表格式顺序为准,总表顺序可调。
请老师们指点,我需要方法,因为我有几百个人需要导出或打印,最主要目的是打印出几百份分表,能批量打印最好,不能就生成的分表一一打印。
先谢谢答复的各位老师。


总表拆分分表.zip

17.07 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2023-11-7 13:19 | 显示全部楼层
先留个记号,下午看看

TA的精华主题

TA的得分主题

发表于 2023-11-7 13:54 | 显示全部楼层
你这个是典型的邮件合并。使用word编辑表格形式。用word里面的邮件合并功能。连接Excel中的数据。生成各自的数据后,打印出来就可以了。

TA的精华主题

TA的得分主题

发表于 2023-11-7 14:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
邮件合并的效果,仅供参考,当然,vba代码也能做到
表格.rar (45.11 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-7 15:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
洋务德雷 发表于 2023-11-7 13:54
你这个是典型的邮件合并。使用word编辑表格形式。用word里面的邮件合并功能。连接Excel中的数据。生成各自 ...

那我先检索一下怎么能邮件合并,谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-7 15:43 | 显示全部楼层
3190496160 发表于 2023-11-7 14:28
邮件合并的效果,仅供参考,当然,vba代码也能做到

谢谢。就是有些数字保留位数太多,不过关键是不会生成,我先检索下关键字看看能不能学会。

TA的精华主题

TA的得分主题

发表于 2023-11-7 15:45 | 显示全部楼层
Sub 填表()
Application.ScreenUpdating = False
Dim ar As Variant
ReDim arr(1 To Sheets.Count)
With Sheets("sheet1")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 2 Then MsgBox "数据源为空!": End
    ar = .Range("a1:ak" & r)
End With
With Sheets("分表")
    rs = .Cells(Rows.Count, 1).End(xlUp).Row
    If rs >= 35 Then .Rows("35:" & rs).Delete
    m = 35
    For i = 2 To UBound(ar) - 1
        .Rows("1:34").Copy .Cells(m, 1)
        m = m + 34
    Next i
    m = 2
    For i = 2 To UBound(ar)
        If Trim(ar(i, 1)) <> "" Then
            .Cells(m, 2) = ar(i, 1)
            .Cells(m, 4) = ar(i, 2)
            xh = m + 2
            .Cells(xh, 6) = ar(i, 7)
            .Cells(xh + 4, 6) = ar(i, 15)
            .Cells(xh + 11, 6) = ar(i, 28)
            .Cells(xh + 24, 6) = ar(i, 32)
            .Cells(xh + 27, 6) = ar(i, 35)
            .Cells(xh + 29, 6) = ar(i, 36)
            .Cells(xh + 30, 6) = ar(i, 37)
            For j = 3 To UBound(ar, 2) - 3
                If InStr(ar(1, j), "★") = 0 Then
                    xh = xh + 1
                    .Cells(xh, 5) = ar(i, j)
                End If
            Next j
            m = m + 34
        End If
    Next i
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-11-7 15:46 | 显示全部楼层
vba完成的
总表.rar (26.27 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-7 16:52 | 显示全部楼层
本帖最后由 babol 于 2023-11-8 09:11 编辑

感谢回复,还辛苦用vba编辑。刚刚已百度了邮件合并,简单易学,对我够用了,多谢上面老师费心。
顺便附上学习结果,转自知乎https://zhuanlan.zhihu.com/p/610881188
看这篇Word邮件合并的超详细用法,就够了
风醉清熙颐
风醉清熙颐

在平常的工作中,我们经常要批量制作一些主要内容相同,只是部分数据有变化的文件,比如成绩单、邀请函、名片等,如果一个个制作的话,会浪费大量的时间。这时候我们就可以利用Word的邮件合并功能,它可以帮助我们快速批量的生成文件,不仅操作简单,而且还可以设置各种格式、打印效果又好,可以满足许多客户不同的需求。

常用到邮件合并的工作:
批量打印信封、批量打印信件、批量打印请柬、批量打印工资条、批量打印个人简历、批量打印学生成绩单、批量打印各类获奖证书、批量打印准考证、明信片等个人报表。
总之,有数据源(Excel电子表格、数据库等),需要批量生成,就可以很方便的按记录的方式从WROD中用邮件合并功能进行打印。

下面我们以制作物业费催款单、律师函为例给大家介绍一下邮件合并的具体使用方法:
第一步:在Excel表格中录入名单信息,然后保存关闭此Excel文件。

名单信息,可以由其他管理软件导出。这里以手动录入的方法做介绍。

催款单和律师函,共用一个excel数据表就够了,也可以分开使用不同的数据表。
注:这里介绍一下,金额数字转成大写的方法和月数自动计算方法:

1、使用“设置单元格格式”-特殊-人民币大写

2、使用万能公式

=TEXT(INT(I2),"[DBNUM2]")&"元"&TEXT(MID(I2,LEN(INT(I2))+2,1),"[DBNUM2]D角")&TEXT(MID(I2,LEN(INT(I2))+3,1),"[DBNUM2]D分")&"整"
这里我们要用邮件合并,所以使用方法2来转换人民币大写。

3、月数计算公式

=DATEDIF(L2,M2,"M")
注意DATEDIF公式参数,时间前后的选择,否则会提示错误信息。

第二步:打开准备好的Word模板。

催费通知合并 - 副本.docx
14K
百度网盘
催交物业费律师函合并 - 副本.docx
18.1K
百度网盘

第三步:点击“邮件”选项卡“开始邮件合并”功能组中的“选择收件人”下拉按钮,在下拉列表中选择 “使用现有列表”,弹出“选取数据源”对话框,然后选择准备好的Excel工作表,点击“打开”。

第四步:将光标定位在Word文档中需要插入信息的位置,点击“邮件”选项卡“编写和插入域”功能组中的“插入合并域”下拉按钮,在下拉列表中选择对应的信息,本例中选择“姓名”,点击“插入”按钮,然后关闭“插入合并域”对话框,此时文档中相应位置会出现已插入的域标记。

第五步:预览结果,发现问题:1.面积部分小数点位数太长,2.时间格式不符合惯例,3.金额没有符号,4.大写没有转换成功。解决办法:

1、面积:在插入的面积域上,右键,切换域代码,显示{ MERGEFIELD 面积 }修改为{ MERGEFIELD 面积 \# 0.00 },然后右键点击更新域。

2、时间:{ MERGEFIELD 生活垃圾欠费起始日期 }修改为{ MERGEFIELD 生活垃圾欠费起始日期 \@ YYYY-MM-DD },然后右键点击更新域。(大写字母YYYY,MM,DD)

3、金额:{ MERGEFIELD 生活垃圾欠费金额 }修改为{ MERGEFIELD 生活垃圾欠费金额 \# ¥ ####0.00 },然后右键点击更新域。

4、大写:{ MERGEFIELD 合计欠费金额大写 }修改为{ MERGEFIELD 生活垃圾欠费金额 \* CHINESENUM2 },然后右键点击更新域。

5、律师函最后的发函日期,如果想用中文的方法,需要修改日期代码为{ MERGEFIELD 发函日期 \@ EEEE年O月A日 },右键点击更新域。(大写字母E,O,A)

第六步:点击“邮件”选项卡“完成”功能组中的“完成并合并”下拉按钮,在下拉列表中点击“编辑单个文档…”,弹出“合并到新文档”对话框,选择“全部”,点击“确定”。此时就会在新窗口中合并生成一个新文档,文档中包含了表格里所有人的信息。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-7 16:54 | 显示全部楼层
论坛好像现在有问题,不能引用回复。感谢上面老师答复,特别是还用vba编辑。
我已百度邮件合并学会了,简单够用。附上学习的帖子:https://zhuanlan.zhihu.com/p/610881188
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 02:36 , Processed in 0.041082 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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