Excel精英培训网

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

[已解决]怎样使生成工资条速度加快(修改代码)

[复制链接]
发表于 2011-8-15 15:46 | 显示全部楼层 |阅读模式
本帖最后由 jiangslly 于 2011-8-15 15:54 编辑

Sub scgzt()
    Dim a As Integer, b As Integer, r As Integer, c As Integer, d As Integer
    d = Sheet12.[A65536].End(xlUp).Row
    r = Sheet12.range("A1:A" & d).Rows.Count - 2
    b = Sheet12.range("A:AE").Columns.Count
      Sheet7.Select
      Sheet7.UsedRange.ClearContents
      For i = 1 To 3 * r + 1 Step 3
          For j = 1 To 25 Step 1
          Cells(i, j).Value = Sheet13.Cells(1, j)
          Next
        Next
        For c = 1 To d Step 1
      For i = 2 To 3 * r + 2 Step 3
         For j = 1 To 25 Step 1
           
           If j <= 8 Then
            
           Cells(i, j) = Sheet12.Cells(c, j)
           ElseIf j <= 22 Then
           Cells(i, j) = Sheet12.Cells(c, j + 5)
           Else
           Cells(i, j) = Sheet12.Cells(c, j + 6)
           End If
       Next
       Next
       Next
End Sub
这是我写的自动生成工资条的代码,发现运行的时候感觉死机了,一下生成不好,请问哪位高手有没有更好的办法加快速度?谢谢
最佳答案
2011-8-15 19:21
是这样吗?
自动生成工资条.rar (24.91 KB, 下载次数: 44)

自动生成工资条.rar

33.97 KB, 下载次数: 13

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-15 19:21 | 显示全部楼层    本楼为最佳答案   
是这样吗?
自动生成工资条.rar (24.91 KB, 下载次数: 44)
回复

使用道具 举报

 楼主| 发表于 2011-8-16 09:34 | 显示全部楼层
回复 zjdh 的帖子

谢谢,成功了,不过我的要求不是那样的,后来我自己发现了问题,正确的代码如下:
Sub scgzt()
    Dim a As Integer, b As Integer, r As Integer, c As Integer, d As Integer
     Application.ScreenUpdating = False
    d = Sheet12.[A65536].End(xlUp).Row
    r = Sheet12.range("A1:A" & d).Rows.Count - 2
    b = Sheet12.range("A:AE").Columns.Count
      Sheet7.Select
      Sheet7.UsedRange.ClearContents
      For i = 1 To 3 * r - 2 Step 3
          For j = 1 To 24 Step 1
          Cells(i, j).Value = Sheet13.Cells(1, j)
          Next
        Next
     For c = 1 To r Step 1
           
             For j = 1 To 24 Step 1
            
           If j <= 8 Then
            
           Cells(3 * c - 1, j) = Sheet12.Cells(c + 2, j)
           ElseIf j <= 22 Then
           Cells(3 * c - 1, j) = Sheet12.Cells(c + 2, j + 5)
           Else
           Cells(3 * c - 1, j) = Sheet12.Cells(c + 2, j + 6)
           End If
       Next
       Next
Application.ScreenUpdating = True
   
End Sub
这样就可以达到我的效果了,不过还是谢谢你,毕竟也是生成工资条了
回复

使用道具 举报

发表于 2011-8-16 10:13 | 显示全部楼层
本帖最后由 zjdh 于 2011-8-16 10:14 编辑

你的不正确!
“工号”与“部门”的内容反啦!
你要第一行也利用起来容易:
Sub test()
    t = Timer
    arr = Sheet12.Range("A3:AE" & Sheet12.Range("A65536").End(3).Row)
    ReDim BRR(1 To UBound(arr) * 3, 1 To 25)
    For i = 1 To UBound(arr)
        For j = 1 To 25
            If j = 1 Then
                BRR(i * 3 - 2, 1) = arr(i, 1)
                BRR(i * 3 - 2, 2) = arr(i, 4)
                BRR(i * 3 - 2, 3) = arr(i, 2)
                BRR(i * 3 - 2, 4) = arr(i, 3)
                j = j + 3
            End If
            If j > 4 And j < 9 Then BRR(i * 3 - 2, j) = arr(i, j)
            If j > 8 And j < 18 Then BRR(i * 3 - 2, j) = arr(i, j + 5)
            If j > 17 Then BRR(i * 3 - 2, j) = arr(i, j + 6)
        Next
    Next
    With Sheet7
        .Range("A2").Resize(.Range("A65536").End(3).Row, 25).ClearContents
        .Range("A2").Resize(UBound(BRR), 25) = BRR
        W = .Range("A65536").End(3).Row
        arr = .Range("A1:Y1")
        For i = W To 3 Step -3
            .Cells(i - 1, 1).Resize(, 24) = arr
        Next
        .Range("J:J,K:K,W:W").WrapText = True
        .Activate
    End With
    MsgBox "创建成功!!总计用时 " & Format(Timer - t, "0.00") & " 秒!!", 64, "提示"
End Sub

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 22:07 , Processed in 0.143996 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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