ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 工资汇总转工资条的多种方法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2002-10-9 06:40 | 显示全部楼层 |阅读模式
现在很多不是很大的单位对人事管理特别是工资管理采用EXECL来进行,EXECL强大的功能,在这方面中足足有余。但是在工资发放方面,我们必须给每个员工一张工资条,由于我们只有一张工资汇总表,要做成一张张工资条,如果人工搞很容易出错,而且工作量也大,其实用office组件,我们可以有多种方法实现它。 当然首先我们得有工资汇总表,可以建立类似图1的表格,并保存为salary.xls 1 用EXECL的函数 我们知道工资条有两行,第一行表示项目(也就图1中的标题行),第二行表示各项明细,但是实际上, 为了裁剪方便,两个工资条之间有一空行,所以工资条中就有第一行为标题,第二行为明细,第三行为空白,也就是说这一行的行号除3余数来决定每一行的内容。 我们新建一个工作表,这里要用到几个函数:IF、MOD、INT、INDEX,前几个函数比较好理解,也许你用过,介绍一个INDEX,它返回表格或区域中的数值或对数值的引用。它有两种形式:数组和引用。数组形式通常返回数值或数值数组;引用形式通常返回引用。我们这里用到引用,所以介绍人一下其函数参数INDEX(reference,row_num,column_num,area_num),Reference为对一个或多个单元格区域的引用。我们这里为工资汇总表 ,Row_num为引用中某行的行序号,函数从该行返回一个引用,Column_num为引用中某列的列序号,函数从该列返回一个引用,需注意的是Row_num、column_num 和 area_num 必须指向 reference 中的单元格;否则,函数 INDEX 返回错误值 #REF!。 由于工资条的第一、三行(这里是指行号被3除后的余数)引用是不变的,而第二行的值要发生变化,这样才能打出每一个人的工资条,仔细观察,你会发现工资条第2行对应于工资汇总第2行,工资条第5行对应于工资汇总第3行,工资条第8行对应于工资汇总第4行,可以通过现在行号来得到引用行号int((row()+4)/3) 根据以上分析,可以在工资条工作表的A1中输入下列公式=IF(MOD(ROW(),3)=0," ",IF(MOD(ROW(),3)=1,工资汇总!$A$1,INDEX(工资汇总!$A:$L,INT((ROW()+4)/3),COLUMN()))),注意这里对表格单元格的引用是绝对引用,选中A1向下拉出第一列,向右拉出第一行,在向右拉出的第一行上,必须更改“工资汇总!$A$1”的引用,分别改成与所在行对应的列数,比如C列改成工资汇总!$C$1;这里如果你想不让某一栏数据显示,只要设置不出现这一列的列标,然后再分别向下拉出每一列的数据。再设置边框格式,就得到如图2所示的工资条。 在EXECL中我们还可以建立宏来做这样的事情,也可以使用lookup这个函数来实现这个功能。 2 用word来做 用word的邮件合并功能,也很容易做这样的事情。 在WORD中建立一个3行多列的表格,第一行为标题栏,对应于工资汇总中的形式,第三行的“边框和底纹”设置为没有。进入“工具”/“邮件合并”,出现“邮件合并帮助器”对话框,在“主文档”单击[创建]按钮,在出现的菜单中选择 “分类”,再选择“活动窗口”(即当前文档使用)。在下面“数据源”中单击[获取数据],在下拉式菜单中选择“打开数据源” ,弹出“打开数据源对话框”。选择存有“salary”的驱动器和文件夹。在文件类型下拉式列表框中选择“MS Excel 工作簿”,选中salary.xls,这里不选“打开方式”,这时会出现“word在主文档中找不到合并域,请选择‘编辑主文档’按钮,在主文档中插入合并域。”的提示,在图3中,将鼠标移动“序号”下的一个单元格。在“插入合并域”的下拉菜单中选择相应的“序号,其它各项类推,等到表格中都插入合并域后,选择工具栏中的“合并至新文档”,则生成了新的文件“分类”,也就是工资条。 3 用access的报表 在access中建立一个新的空数据库,在“文件”—“获取外部数据”—“导入”,选择文件类型为“Microsoft Execl”,找到salary.xls这个文件,再选择“工资汇总”中的数据,然后一路“下一步”,最后一个“工资汇总”表。在“报表”中“新建”-自动创建报表:表格式,当然这里要选择对象数据来源为:工资汇总,确定以后生成的一张工资表是一个总表,我们可以对它进行修改。选中报表中的工资汇总,再进入设计界面,如图4,将页面页眉中所有的标签移动主体文本框的上方,再格式工具调整齐,注意这里要按shift+各个控件,以便一起移动,以免调整位置的麻烦

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2002-10-10 23:28 | 显示全部楼层
没有人看
[此贴子已经被作者于2002-10-10 23:28:58编辑过]

TA的精华主题

TA的得分主题

发表于 2002-10-11 18:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2002-10-11 19:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2002-10-11 20:38 | 显示全部楼层
To zhengrd: 很好,这样改一下会更好: =IF(MOD(ROW(),3)=0,"",IF(MOD(ROW(),3)=1,工资汇总!A$1,INDEX(工资汇总!$A:$L,INT((ROW()+4)/3),COLUMN())))

TA的精华主题

TA的得分主题

发表于 2004-8-15 14:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

想问一下,干嘛用INT((ROW()+4)/3)来引用行号,我把INT去掉也没觉得有什么不同啊!

TA的精华主题

TA的得分主题

发表于 2004-8-15 15:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-8-15 15:45 | 显示全部楼层

楼主的公式: =IF(MOD(ROW(),3)=0," ",IF(MOD(ROW(),3)=1,工资汇总!$A$1,INDEX(工资汇总!$A:$L,INT((ROW()+4)/3),COLUMN())))

cxffxc的公式: =IF(MOD(ROW(),3)=0,"",IF(MOD(ROW(),3)=1,工资汇总!A$1,INDEX(工资汇总!$A:$L,INT((ROW()+4)/3),COLUMN())))

我用了一下,到达第L列后就会出现引用错误了,问题是出现在第三个条件的绝对引用上,所以我改为如下: =IF(MOD(ROW(),3)=0,"",IF(MOD(ROW(),3)=1,工资汇总!A$1,INDEX(工资汇总!$A:A,(ROW()+4)/3,COLUMN())))

哈哈,就不会出错了!!!

[em05][em05]

TA的精华主题

TA的得分主题

发表于 2004-8-16 15:34 | 显示全部楼层

感谢高手!

对于我这样的菜鸟,看到这样的文章真是如获至宝,的确是:“登录此一站,胜读十年书”啊!也许就我而言,就是十年也摸索不出这样的一个操作。黄鹰向这些不吝赐教的高手们致敬!!!!

楼下的朋友,实例你自己对着做就是了,也太懒了吧!!你看人家楼上的朋友,同样也是新手,他能改进这个公式,改得真是太好,也少了许多改行列号的步骤,我们都应该多向他学习!下面是我的实例操作,请指教!

vPAh8xKZ.rar (11.72 KB, 下载次数: 1197)
[此贴子已经被作者于2004-9-13 23:33:02编辑过]

TA的精华主题

TA的得分主题

发表于 2004-8-16 16:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 17:32 , Processed in 0.045358 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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