Excel精英培训网

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

[已解决]能不能修改下代码?

[复制链接]
发表于 2013-2-17 15:12 | 显示全部楼层 |阅读模式
本帖最后由 dadasdas 于 2013-2-17 19:44 编辑

帮忙精简下代码?
Sub test()
    For i = 5 To Range("H" & Rows.Count).End(3).Row
        If Cells(i, 8).Interior.ColorIndex = 40 And Cells(i, 8) <> "" Then
            Cells(i, 30) = Cells(i, 8).Value
            Cells(i, 31) = 10: Cells(i, 21) = "1": Cells(i, 23) = "2": Cells(i, 26) = "d"
            Cells(i, 32) = Cells(i, 31) * Cells(i, 30)
        ElseIf Cells(i, 8).Interior.ColorIndex = 44 And Cells(i, 8) <> "" Then
            Cells(i, 30) = Cells(i, 8).Value
            Cells(i, 31) = 50: Cells(i, 21) = "1": Cells(i, 23) = "2": Cells(i, 26) = "b"
            Cells(i, 32) = Cells(i, 31) * Cells(i, 30)
        ElseIf Cells(i, 8).Interior.ColorIndex = 45 And Cells(i, 8) <> "" Then
            Cells(i, 30) = Cells(i, 8).Value
            Cells(i, 31) = 60: Cells(i, 21) = "1": Cells(i, 23) = "2": Cells(i, 26) = "c"
            Cells(i, 32) = Cells(i, 31) * Cells(i, 30)
        ElseIf Cells(i, 8).Interior.ColorIndex = 46 And Cells(i, 8) <> "" Then
            Cells(i, 30) = Cells(i, 8).Value
            Cells(i, 31) = 70: Cells(i, 21) = "1": Cells(i, 23) = "2": Cells(i, 26) = "a"
            Cells(i, 32) = Cells(i, 31) * Cells(i, 30)
        End If
    Next
End Sub
最佳答案
2013-2-17 17:32
Book1d.rar (15.47 KB, 下载次数: 18)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-2-17 15:27 | 显示全部楼层
没有附件,只有这样修改,只能提升一点速度!!

  1. Sub test()
  2. Dim Ys As Byte
  3.     For i = 5 To Range("H" & Rows.Count).End(3).Row
  4.       If Cells(i, 8) <> "" Then   '减少多重提取单元格数据判断次数
  5.         Cells(i, 21) = "1"
  6.         Cells(i, 23) = "2"
  7.         Ys = Cells(i, 8).Interior.ColorIndex    '减少对单元格的反复询问
  8.         If Ys = 40 Then
  9.             Cells(i, 31) = 10
  10.             Cells(i, 26) = "d"
  11.         ElseIf Ys = 44 Then
  12.             Cells(i, 31) = 50
  13.             Cells(i, 26) = "b"
  14.         ElseIf Ys = 45 Then
  15.             Cells(i, 31) = 60
  16.             Cells(i, 26) = "c"
  17.         ElseIf Ys = 46 Then
  18.             Cells(i, 31) = 70
  19.             Cells(i, 26) = "a"
  20.         End If
  21.       End If
  22.       Cells(i, 30) = Cells(i, 8).Value
  23.       Cells(i, 32) = Cells(i, 31) * Cells(i, 30)
  24.     Next
  25. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-2-17 15:50 | 显示全部楼层
本帖最后由 dadasdas 于 2013-2-17 16:16 编辑
无聊的疯子 发表于 2013-2-17 15:27
没有附件,只有这样修改,只能提升一点速度!!


还是发附件吧
从第五行开始,如果H列数据填充色是茶色,那么U列自动填上1,W列填上2,Z列填上b,AD列=H列的值,AE列填上100,然后AD列和AE列数据相加,结果显示在AF列
下面还有三种填充色,看附件里的数据,同上
附件: Book1.rar (2.31 KB, 下载次数: 5)
回复

使用道具 举报

发表于 2013-2-17 16:45 | 显示全部楼层

  1. Sub test()
  2.     Dim A, i%

  3.     With Sheets("sheet1")
  4.         A = .Range("A4").CurrentRegion
  5.         For i = 2 To UBound(A)
  6.             If A(i, 8) <> "" Then
  7.                 A(i, 21) = "1": A(i, 23) = "2": A(i, 30) = A(i, 8)
  8.                 Select Case .Cells(i + 3, "H").Interior.ColorIndex
  9.                 Case 40
  10.                     A(i, 26) = "d": A(i, 31) = 10
  11.                 Case 44
  12.                     A(i, 26) = "b": A(i, 31) = 50
  13.                 Case 45
  14.                     A(i, 26) = "c": A(i, 31) = 60
  15.                 Case 46
  16.                     A(i, 26) = "a": A(i, 31) = 70
  17.                 End Select
  18.                 A(i, 32) = A(i, 30) * A(i, 31)
  19.             End If
  20.         Next
  21.         .Range("A4").Resize(UBound(A), UBound(A, 2)) = A
  22.     End With
  23. End Sub
复制代码
Book1B.rar (15.21 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2013-2-17 16:52 | 显示全部楼层
爱疯 发表于 2013-2-17 16:45
照1楼2楼改的

有个问题,H列数据没有填充色,右边也添加了
回复

使用道具 举报

发表于 2013-2-17 17:05 | 显示全部楼层
dadasdas 发表于 2013-2-17 16:52
有个问题,H列数据没有填充色,右边也添加了

也添加了,是因上次的运行结果未清除造成的。

不理解哪块区域需事先清除,ad:af么?

Book1c.rar (15.15 KB, 下载次数: 2)
回复

使用道具 举报

 楼主| 发表于 2013-2-17 17:17 | 显示全部楼层
爱疯 发表于 2013-2-17 17:05
也添加了,是因上次的运行结果未清除造成的。

不理解哪块区域需事先清除,ad:af么?

我的意思是只要H列数据没有填充色,右边所有的数据都不要添加



回复

使用道具 举报

发表于 2013-2-17 17:32 | 显示全部楼层    本楼为最佳答案   
Book1d.rar (15.47 KB, 下载次数: 18)
回复

使用道具 举报

 楼主| 发表于 2013-2-18 15:33 | 显示全部楼层
  1. Sub test2()
  2.     Dim A, i%

  3.     With Sheets("sheet1")
  4.         .Range("i5:af65536").ClearContents
  5.         A = .Range("A4").CurrentRegion
  6.         For i = 2 To UBound(A)
  7.             If A(i, 8) <> "" Then
  8.                 Select Case .Cells(i + 3, "H").Interior.ColorIndex
  9.                 Case 40
  10.                     A(i, 26) = "d": A(i, 31) = 10
  11.                 Case 44
  12.                     A(i, 26) = "b": A(i, 31) = 50
  13.                 Case 45
  14.                     A(i, 26) = "c": A(i, 31) = 60
  15.                 Case 46
  16.                     A(i, 26) = "a": A(i, 31) = 70
  17.                 Case Else
  18.                     GoTo 100
  19.                 End Select
  20.                 A(i, 21) = "1": A(i, 23) = "2": A(i, 30) = A(i, 8)
  21.                 If A(i, 31) Then A(i, 32) = A(i, 30) * A(i, 31)
  22.             End If
  23. 100:
  24.         Next
  25.         .Range("A4").Resize(UBound(A), UBound(A, 2)) = A
  26.     End With
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-2-18 15:37 | 显示全部楼层
爱疯 发表于 2013-2-17 17:32
这样可以吗

i + 3是什么意思?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 19:42 , Processed in 0.590704 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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