那位excel老师能给我详细解释一下这个工资条的公式,公式如下:

=IF(MOD(ROW(),3)=1,工资表!A$1,IF(MOD(ROW(),3)=2,OFFSET(工资表!$A$1,(INT(ROW()/3)+MOD(ROW(),3))-1,COLUMN()-1),""))

公式效果

= MOD(3,2),  å°±èŽ·å¾—两数相除的余数,例子余1.

=ROW()函数,返回所在的行数。

公式第一句:如果(IF) 行数除以3,余1,就返回工资表A1格,也就是显示“姓名”两字。

后面,如果行号除以3,余2,就执行SFFSET语句。否则,就空格。

这样表格就会形成  ä¸€è¡Œâ€œå§“名”,一行人名字,一行空行格。

SFFSET()函数,简单讲 :=SFFSET(参照系,偏移行数,偏移列数)。

INT(),把数字向下舍去到接近值,如INT(8.9),结果是8。

COLUMN()函数是引用列数,如 :=COLUMN(B5), 结果是2。A列就是1,B列就是2.....Z列就是26。

可以说做公式的人很有水平,佩服。


我有个不用做公式的办法,把工资表变成工资条,每人撕走一条。

     æŠŠå·¥èµ„表复制一张。

    做序号,每人一号,1、2、3、.....100。(假设有100人)

    在表格下方空白处接着做序号0.5、1.5、2.5、3.5.......100.5。(可以下拉自动生成)

    复制“姓名、所属单位.....实发工资” 这一行。选中0.5到100.5 到L列这一区域----粘贴。就形成了99条项目行。

    在下方接着做序号,1.2、2.2、3.2、4.2.....99.2、100.2。

    光标在任意序号格,点工具条中的“排序"(升序)按钮。就OK了。删除序号列更美观。

    表格会按照  ï¼šé¡¹ç›®ã€åå­—、空行、项目、名字、空行.....的顺序排列。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-06
用这个也行=CHOOSE(MOD(ROW(1:1)-1,3)+1,工资表!A$1,OFFSET(工资表!$A$1,INT((ROW(1:1)-2)/3)+1,COLUMN(A:A)-1),"")
主要是循环变化问题,把=ROW(1:1)-1,3)+1和=INT((ROW(2:2)-2)/3)+1放在一列向填充看看人什么规律。
第2个回答  2015-04-06

    这个公式,每三行循环一次。每次循环中:

    如果是第一行,那么取第一行(也就是表头)中和公式所在列相同列的值

    如果是第三行,空白,下面是比较复杂一点的第二行

    如果是第二行,以一个固定单元格$A$1作为基准,获取一个相对这个基准位置具有(xy)偏移量的单元格的值:

      其中y偏移量【Column()-1】是当前所在列号-1-------当前列是1,向右偏移1-1=0列,右拉后,当前列是2,向右偏移2-1=1列……

      其中x偏移量【INT(ROW()/3)+MOD(ROW(),3))-1,】是当前所在行应该表示的职工的位置

      因为每个职工会占用3行,所以【当前的行号/3】就是第几个员工---->  INT(ROW()/3)

      MOD(ROW(),3))-1累赘了,其实用【+1】就可以了;这部分是调整结构使用的

=IF(MOD(ROW(),3)=1,工资表!A$1,IF(MOD(ROW(),3)=2,OFFSET(工资表!$A$1,(INT(ROW()/3)+1,COLUMN()-1),""))

这样就可以了

本回答被提问者采纳
第3个回答  2015-04-06

追问

太专业了,很详细,但是看不懂

追答

简单说,就是从工资表里提取信息,获得
第1、4、7、10……行都是“姓名、所属部门、职工类别……等
第2、5、8、11……行都是具体的姓名、部门、类别
第3、6、9、12……黄都是空行。

相似回答