仅用Excel实现World的邮件合并

本文用于解决Excel中,把很多条数据分别填充到一个模板的问题。

需要了解的信息

Excel 函数:

  1. address。接受5个参数,返回由这五个参数生成的对单元格的引用。 用法:address(第几行,第几列(数字),相对引用还是绝对引用,此处用不到不填,另一个工作表的名字)
    比如,ADDRESS(1,3,1,,"Sheet2"),返回Sheet2!$C$1。这样一来,只要修改它的参数即可更改引用的单元格。但是结果是文本字符串,要得到这个字符串所引用的单元格的值就要用indirect。
  2. indirect。接受2个参数,返回第一个参数指定的单元格的值,第二个参数此处用不到,省略。用法:indirect("上面公式生成的字符串")
    例如,indirect("Sheet2!$C$1"),将返回Sheet2工作表,C列,第1行的值。等同于公式=Sheet2!$C$1

开始

  • 假如打印模板和数据是这样的,模板在Sheet1,数据在Sheet2。打印区域已设置好。
    sheet.png
    data.png
    姓名单元格的公式就是=INDIRECT(ADDRESS(2,1,1,,"Sheet2")),提取Sheet2表,第二行,第一列的数据。生日的公式就是=INDIRECT(ADDRESS(2,2,1,,"Sheet2")),获取Sheet2表,第二行,第二列的数据。其他单元格以此类推。

  • 这样就做好了基本的样子,接下来让这个模板能填充其他数据
    在一个单元格中填入序号,比如G1。那么第一位同学的数据行号是2,第二位是3,依次递增。那么只需要更改公式中的行号,改成1加上序号,就能让模板内容随着序号改变而更新。那么姓名的公式就该改成=INDIRECT(ADDRESS(1+G1,1,1,,"Sheet2"))。请注意ADDRESS函数的第一个参数。这样,改动序号就能填充其他同学的数据了。

  • 加个按钮来更改序号吧
    首先在选项-自定义功能区-开发工具前面打勾,确定。点击菜单栏的开发工具,插入ActiveX控件“数值调节钮”。在表上画出一组上下按钮。在按钮上右键-属性,修改Min为1,Max为Sheet2中数据总行数,LinkedCell为G1。
    点击“设计模式”。再点击按钮,序号和模板中的数据应该就可以变化了。

  • 加个按钮一键打印
    在开发工具中添加ActiveX控件,按钮。右键按钮选属性,其中Caption就是按钮上显示的文字,改成“打印”或者随便什么文字。
    双击按钮进入代码编辑。在光标位置输入代码ActiveSheet.PrintOut
    退出设计模式,再点击按钮就会以当前默认的打印机、纸张、边距、打印区域等设置打印出当前表了。

  • 打印后自动增加序号
    在打印按钮的代码中,ActiveSheet.PrintOut下面,添加一句Range("G1").Value = Range("G1").Value + 1

添加新评论