Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2691|回复: 10

[已解决]请帮忙修改下代码

[复制链接]
发表于 2011-9-18 17:08 | 显示全部楼层 |阅读模式
我在汇总工资的时候遇到的问题,原本是想把工资表统一汇总到一张年度工资汇总表里,但运行时出了点问题,请大侠们帮我看看,谢谢
最佳答案
2011-9-20 13:19
本帖最后由 zjdh 于 2011-9-20 13:19 编辑

  1. Sub TEST()
  2.     Dim I%, J%, C%
  3.     Application.ScreenUpdating = False
  4.     Workbooks.Open (ThisWorkbook.Path & "\公司工资表2011-7.xls")
  5.     ARR = ActiveSheet.Range("B3:AD" & ActiveSheet.Range("A65536").End(3).Row)
  6.     ActiveWorkbook.Close False
  7.     With ThisWorkbook.Sheets(1)
  8.         For I = 1 To UBound(ARR)
  9.             C = .Range("B65536").End(xlUp).Row
  10.             If C = 2 Then C = 3
  11.             For J = 3 To C
  12.                 If ARR(I, 4) = .Range("B" & J) Then
  13.                     .Range("A" & J) = ARR(I, 3)
  14.                     .Range("C" & J) = ARR(I, 1)
  15.                     .Range("D" & J) = ARR(I, 2)
  16.                     .Range("E" & J) = ARR(I, 21)
  17.                     .Range("F" & J) = ARR(I, 22)
  18.                     .Range("G" & J) = ARR(I, 23)
  19.                     .Range("H" & J) = ARR(I, 29)
  20.                     Exit For
  21.                 End If
  22.                 If J = C Then
  23.                     .Range("A" & C + 1) = ARR(I, 3)
  24.                     .Range("B" & C + 1) = ARR(I, 4)
  25.                     .Range("C" & C + 1) = ARR(I, 1)
  26.                     .Range("D" & C + 1) = ARR(I, 2)
  27.                     .Range("E" & C + 1) = ARR(I, 21)
  28.                     .Range("F" & C + 1) = ARR(I, 22)
  29.                     .Range("G" & C + 1) = ARR(I, 23)
  30.                     .Range("H" & C + 1) = ARR(I, 29)
  31.                 End If: Next: Next: End With
  32.     Application.ScreenUpdating = True
  33. End Sub
复制代码

复件 工资计算.rar

26.77 KB, 下载次数: 28

发表于 2011-9-18 19:17 | 显示全部楼层
本帖最后由 zjdh 于 2011-9-18 19:39 编辑

不就是引入姓名和工号吗?简单:
  1. Sub TEST()
  2.     Dim I%, J%, C%
  3.     Application.ScreenUpdating = False
  4.     Workbooks.Open (ThisWorkbook.Path & "\公司工资表2011-7.xls")
  5.     ARR = ActiveSheet.Range("D3:E" & ActiveSheet.Range("A65536").End(3).Row)
  6.     ActiveWorkbook.Close False
  7.     With ThisWorkbook.Sheets(1)
  8.         For I = 1 To UBound(ARR)
  9.             C = .Range("B65536").End(xlUp).Row
  10.             If C = 2 Then C = 3
  11.             For J = 3 To C
  12.                 If ARR(I, 2) = .Range("B" & J) Then .Range("A" & J) = ARR(I, 1): Exit For
  13.                 If J = C Then
  14.                     .Range("A" & C + 1) = ARR(I, 1)
  15.                     .Range("B" & C + 1) = ARR(I, 2)
  16.                 End If: Next: Next: End With
  17.     Application.ScreenUpdating = True
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2011-9-19 13:46 | 显示全部楼层
把包容你要的数据都放在数组里,再按要求提取!
回复

使用道具 举报

 楼主| 发表于 2011-9-19 13:31 | 显示全部楼层
回复 zjdh 的帖子

谢谢,假如我还要同时导入工资数据怎么办?全部放到数组里面吗?但是我汇总的数据有三列,而且这三列在原工资表中并不连在一起,请问该怎么做呢?
回复

使用道具 举报

 楼主| 发表于 2011-9-19 14:13 | 显示全部楼层
回复 zjdh 的帖子

能不能举个例子,比如我数据放在第五列和第18列,我要把这两列数据放在一个数组里面该怎么写代码?啊
回复

使用道具 举报

发表于 2011-9-19 15:03 | 显示全部楼层
你直接说吧,要引用那几个数据。
回复

使用道具 举报

发表于 2011-9-19 15:05 | 显示全部楼层
就你上传的附件而言,便于编写宏。
回复

使用道具 举报

 楼主| 发表于 2011-9-20 09:27 | 显示全部楼层
回复 zjdh 的帖子

我需要应发工资、个人所得税、水电费、实付工资,在工资表中的列是不连在一起的,这个时候怎么把工资表中不连续的列添加到数组中呢
回复

使用道具 举报

发表于 2011-9-20 13:04 | 显示全部楼层
把它全部包容进去就可以啦!
回复

使用道具 举报

发表于 2011-9-20 13:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2011-9-20 13:19 编辑

  1. Sub TEST()
  2.     Dim I%, J%, C%
  3.     Application.ScreenUpdating = False
  4.     Workbooks.Open (ThisWorkbook.Path & "\公司工资表2011-7.xls")
  5.     ARR = ActiveSheet.Range("B3:AD" & ActiveSheet.Range("A65536").End(3).Row)
  6.     ActiveWorkbook.Close False
  7.     With ThisWorkbook.Sheets(1)
  8.         For I = 1 To UBound(ARR)
  9.             C = .Range("B65536").End(xlUp).Row
  10.             If C = 2 Then C = 3
  11.             For J = 3 To C
  12.                 If ARR(I, 4) = .Range("B" & J) Then
  13.                     .Range("A" & J) = ARR(I, 3)
  14.                     .Range("C" & J) = ARR(I, 1)
  15.                     .Range("D" & J) = ARR(I, 2)
  16.                     .Range("E" & J) = ARR(I, 21)
  17.                     .Range("F" & J) = ARR(I, 22)
  18.                     .Range("G" & J) = ARR(I, 23)
  19.                     .Range("H" & J) = ARR(I, 29)
  20.                     Exit For
  21.                 End If
  22.                 If J = C Then
  23.                     .Range("A" & C + 1) = ARR(I, 3)
  24.                     .Range("B" & C + 1) = ARR(I, 4)
  25.                     .Range("C" & C + 1) = ARR(I, 1)
  26.                     .Range("D" & C + 1) = ARR(I, 2)
  27.                     .Range("E" & C + 1) = ARR(I, 21)
  28.                     .Range("F" & C + 1) = ARR(I, 22)
  29.                     .Range("G" & C + 1) = ARR(I, 23)
  30.                     .Range("H" & C + 1) = ARR(I, 29)
  31.                 End If: Next: Next: End With
  32.     Application.ScreenUpdating = True
  33. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 12:51 , Processed in 0.327944 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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