Excel中每一行添加出现表头
一共有以下三个解决方案
1. 写一个宏根据源数据生成“工资单”工作表 2. 用一个比较复杂的公式来生成
3. 使用 Word 配合,用“邮件合并”功能实现
第三种方法比较简单,而且可以很好的控制格式,推荐使用,在这里先解释,建议先看看Word中关于邮件合并的帮助 引用
第一步:建立数据库
新建一个Excel电子表格,将每个职工的工资结构输入表格(注意不能保留标题行,但是不要省略表格中的表头,以免邮件合并时找不到合并域名。在使用Excel工作簿时,必须保证数据文件是数据库格式,即第一行必须是字段名,数据行中间不能有空行等。这样可以使不同的数据共享,避免重复劳动,提高办公效率。),保存名为“x月工资.xls”后即可关闭以备后用。
第二步:建立工资单表格
新建一个Word文档(可以将页面设置成横向),将新建电子表格的表头复制过来成为1行数列的无数据表格,在表格最后的表格内按“tab”键插入1行(然后在表格下方按回车键一次或两次,方便打印后裁剪)。保存为“x月工资.doc”。
第三步:邮件合并
1.在刚建立的“x月工资.doc”文档中,选择菜单栏的“工具/信函和邮件/显示邮件合并工具栏”,则出现“邮件合并工具栏”。(再选择“工具/自定义/命令/(在类别中选择)邮件合并/(在命令中选择)/插入合并域”将“插入合并域”拖入“邮件合并工具栏”。) 2.在“邮件合并工具栏”中点击“打开数据源”按钮,选择“+连接到新数据源.odc”,在出现打开文件对话框中找到并打开刚保存的Excel电子表格“X月工资.xls”,点击“打开”会弹出的对话框中点击所需数据源,这时你会发现在工具栏中“插入合并域”处于激活状态。 3.把光标置于要插入相应项目的位置,点击“插入合并域”下拉菜单(下拉菜单中的相应选项与“x月工资.xls”表格中的标题行是一一对应的),然后单击下拉菜单中的相应选项,直至操作完毕。
4.在“邮件合并工具栏”中有“设置文档类型”,选择“目录”类型,(不要选“普通word文档”)点击确定。最后点击“合并到新文档”按钮,你会收到意想不到的效果——每位员工的工资记录都成了一个新文档,试试吧!
下面介绍公式法: 引用
先观察思考原数据分布 第1行是标题
第2,3,4,5,..行是数据
观察思考目标数据分布 第1,4,7,10,?行是标题 第2,5,8,11,?行是数据 第3,6,9,12,?行是空行
即,当前行号除以3的余数为1的时候,是标题 当前行号除以3的余数为2的时候,是数据 其它(只剩除以3余数为0的情况了)是空行
标题行数据直接引用数据表的 A$1,因为每次行号是固定的,所以用绝对引用
数据行数据需要进行偏移 2,5,8,11,?除以3,取整, 结果分别是 0,1,2,3,? 对应数据表 2,3,4,5,?
我们用相对于数据表第1行的偏移,那就应该分别是1,2,3,4? 也就是说,相对于数据表第1行的偏移量是 INT(ROW()/3) + 1 引用就是 OFFSET(A$1, INT(ROW()/3) + 1, 0) 注意,列偏移为 0,即列不偏移
这样,把上述各部分组合起来,得到工资表 A1 的公式
=IF(MOD(ROW(),3),OFFSET(Sheet2!$A$1,(MOD(ROW()-1,3)>0)*ROUND(ROW()/3,),COLUMN(Sheet2!A2)-1),\
为了大家看清楚,我分成多行来写 =IF(
MOD(ROW(),3),
OFFSET(Sheet2!$A$1,
(MOD(ROW()-1,3)>0)*ROUND(ROW()/3,),
COLUMN(Sheet2!A2)-1),
\
)
然后把 A1 的公式向右复制给 B1-E1,生成第一行数据
再把第一行从 A1-E1 的公式向下复制到人数×3行,即得到工资表
最后介绍用宏的方法实现: 引用
下面是全部代码:
Sub 加插表头()
Dim i As Integer
Dim endrow As Integer Dim hrstar As Integer Dim hrend As Integer
endrow = Range(\
hrstar = InputBox(\请输入表头开始行\ hrend = InputBox(\请输入表头结束行\
i = hrend + 2 Do
If i > endrow Then Exit Do
Rows(hrstar & \
Selection.Copy
Rows(i & \
Selection.Insert Shift:=xlDown
i = i + hrend - hrstar + 2
endrow = endrow + hrend - hrstar + 1
Loop
End Sub