例如:工号

解决方案 »

  1.   

    类似工资条吧?
    这个用vfp,access等等最容易了
    用excel挺麻烦的
      

  2.   

    楼上的用accesst怎么弄.教教我!
      

  3.   

    把数据导入到access数据库中
    在access数据库中建一个报表
    自己学学吧,很有用的
      

  4.   

    ZZ看起来比较麻烦现在许多单位都实现了工资代储,但每月的工资清单(工资条)还得要发给职工。如果用Excel程序处理的工资表,打印后每页只有一个表头,剪裁成条后除了每页的第一名职工外,其余的就没有表头了,这样将使职工无法清楚工资条的数字对应什么具体名目。怎样才能给每个职工的工资条加上工资表表头呢?这里笔者将解决方案介绍给大家。首先根据每个职工工资具有唯一电脑序号的特点,使用VBA里的判断语句,让循环从第一个电脑序号开始,如果Excel表中相邻两行的电脑序号不同,就在这两行之间插入一个空白行,然后使用循环语句,把表头的内容依次复制粘贴到每个空白行。下面是具体的操作步骤:1.在Excel中打开需要制作工资条的工资表文件。2.打开“工具”/“宏”(如果在菜单中没有看见“宏”,让鼠标在菜单上稍停留或者按向下的双箭头就会出现),选择“Visual Basic编辑器”,打开VBA编辑器窗口,在VBAProject的工程资源管理器中双击Sheet1,会出现代码编辑窗口,在代码编辑窗口输入如下代码:Sub gongzitiao()
     Application.ScreenUpdating = False
      '为避免破坏表一,将表一内容完整复制到表二
      Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]
       '定义循环变量的最大值不小于表二中职工数的二倍(我校职工总数为2564)
       a = (Application.WorksheetFunction.CountA(Sheets(2).[a1:a2600] * 2 
       '如果第一列(职工的工资电脑序号)上下单元格的值不相等,则在它们之间插入一个空白行
       For i = 3 To a
       If Sheets(2).Cells(i,1)<>Sheets(2).Cells(i + 1,1) And (Sheets(2).Cells(i, 1) <> "") Then
        Sheets(2).Rows(i + 1).Insert
       End If
        '如果第一列中的单元格为空,则将表中[A2:M2](工资清单表头项目)复制到此行
       If Sheets(2).Cells(i,1) = "" Then
        Sheets(2).[A2:M2].Copy Sheets(2).Cells(i,1)
       End If
       Next
       Application.ScreenUpdating = True
      End Sub3.检查源代码编辑无误后,在VBA窗口中打开菜单“运行”/“运行宏”,将弹出“宏”窗口,你只需单击“运行”即可。4.待宏运行完毕,再回到Excel,单击工资表下方的“Sheet2”,于是在每两个相邻职工间就插入了工资清单项目,再用打印机打印并裁条后,就可以发放给每位职工了。该操作在Excel 2000下调试通过。-----------------------------------------------------经过引申,我们可以作如下更改:1、打印双表头带空行   先在表前插入一行空白行,并定义好双表头,如陕西省电子工业学校 计算机应用xxx班 期末考试 
    学号 姓名 语文 数学 物理 英语 职德 计算机 体育 名次   
    然后照上面介绍的方法,插入代码:
    Sub gongzitiao()
          Application.ScreenUpdating = False
          '为避免破坏表一,将表一内容完整复制到表二
          Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]
          '定义循环变量的最大值不小于表二中职工数的二倍(我校职工总数为2564)
          'a = Application.WorksheetFunction.CountA(Sheets(2).[a1:a2600] * 2)
          a = 200
          '如果第一列(职工的工资电脑序号)上下单元格的值不相等,则在它们之间插入一个空白行
          For i = 3 To a Step 4 '数据从第3行开始
          If Sheets(2).Cells(i, 1) <> Sheets(2).Cells(i + 1, 1) And (Sheets(2).Cells(i, 1) <> "") Then
          Sheets(2).Rows(i + 1).Insert
          Sheets(2).Rows(i + 1).Insert
          Sheets(2).Rows(i + 1).Insert
          End If
          '如果第一列中的单元格为空,则将表中[A2:Q2](工资清单表头项目)复制到此行
          If Sheets(2).Cells(i, 1) <> "" And Sheets(2).Cells(i + 1, 1) = "" And Sheets(2).Cells(i + 2, 1) = "" And Sheets(2).Cells(i + 3, 1) = "" Then
         Sheets(2).[A1].Copy Sheets(2).Cells(i + 2, 1)
          Sheets(2).[A1:Q2].Copy Sheets(2).Cells(i + 2, 1)
          End If
          Next
          Application.ScreenUpdating = True
    End Sub----------------------------------------------------2、双表头无空行Sub gongzitiao()
          Application.ScreenUpdating = False
          '为避免破坏表一,将表一内容完整复制到表二
          Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]
          '定义循环变量的最大值不小于表二中职工数的二倍(我校职工总数为2564)
          'a = Application.WorksheetFunction.CountA(Sheets(2).[a1:a2600] * 2)
          a = 200
          '如果第一列(职工的工资电脑序号)上下单元格的值不相等,则在它们之间插入一个空白行
          For i = 3 To a Step 3 '数据从第3行开始
          If Sheets(2).Cells(i, 1) <> Sheets(2).Cells(i + 1, 1) And (Sheets(2).Cells(i, 1) <> "") Then
          Sheets(2).Rows(i + 1).Insert
          Sheets(2).Rows(i + 1).Insert
          'Sheets(2).Rows(i + 1).Insert
          End If
          '如果第一列中的单元格为空,则将表中[A2:Q2](工资清单表头项目)复制到此行
          If Sheets(2).Cells(i, 1) <> "" And Sheets(2).Cells(i + 1, 1) = "" And Sheets(2).Cells(i + 2, 1) = "" Then
         'Sheets(2).[A1].Copy Sheets(2).Cells(i + 1, 1)
          Sheets(2).[A1:Q2].Copy Sheets(2).Cells(i + 1, 1)
          End If
          Next
          Application.ScreenUpdating = True
    End Sub
      

  5.   

    无须使用VBA,使用公式即可简单的实现,如下:
    [也可参照我在另一帖子的回复:]http://community.csdn.net/Expert/topic/5000/5000593.xml?temp=.1967279假设原本工资的标题行在第一行,从第二行开始为数据,如下示例:
               A            B             C
    1         工号         出勤          工资
    2          1            21           8430
    3          2            21           4690
    4          3            20           7545
    5          4            21           6680
    6          5            21           2190假设我们的公式从D1开始(E1、F1的公式一样,可从D1复制),公式如下:
    =INDIRECT(IF(MOD(ROW(),2)=1,ADDRESS(MOD(ROW(),2),COLUMN()-3),ADDRESS(ROW()/2+1,COLUMN()-3)))您可以将该公式复制到D、E、F列的相应区域,结果如下:
          A        B        C        D        E        F
    1    工号    出勤      工资     工号     出勤     工资
    2     1       21       8430      1        21      8430
    3     2       21       4690     工号     出勤     工资
    4     3       20       7545      2        21      4690
    5     4       21       6680     工号     出勤     工资
    6     5       21       2190      3        20      7545
                                    工号     出勤     工资
                                     4        21      6680
                                    工号     出勤     工资
                                     5        21      2190您可以看到依据A、B、C列的源数据,已经生成了D、E、F列的结果了。注:公式中的COLUMN()-3在示例中表示相对位置偏右3列,随着工作表/相对位置的不同,需要更改相应的相对位置。若有疑问,可以继续探讨。
      

  6.   

    但还不太懂,请再赐教:
    =INDIRECT(IF(MOD(ROW(),2)=1,ADDRESS(MOD(ROW(),2),COLUMN()-3),ADDRESS(ROW()/2+1,COLUMN()-3)))能不能把具体的数字代入上面的公式,这样比较容易理解?