Excel精英培训网

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

[已解决]这个代码运行的速度很慢,不知道怎么回事

[复制链接]
发表于 2013-1-6 08:32 | 显示全部楼层 |阅读模式
Sub 清除()
    Dim i%
    For i = 5 To Cells(Rows.Count, 1).End(3).Row
        If Cells(i, 11) = "—" Or Cells(i, 11) = 0 Then
            Range("b" & i).Resize(1, 13).ClearContents
        End If
    Next i
End Sub

这个代码每次运行的时候都要好几秒钟,速度太慢。可有大侠帮我修改下吗?   我的工作表从(A5:N100)都有数据。
最佳答案
2013-1-6 15:00
在某种情况下可以试下以下代码:
Sub 清除()
     Dim ar(), s$, i%
     Application.ScreenUpdating = 0
     i = Cells(Rows.Count, 1).End(3).Row
     ar = Cells(5, 11).Resize(i, 1).Value
     For i = 1 To UBound(ar)
         If ar(i, 1) = "—" Or ar(i, 1) = 0 Then
             s = s & ",b" & i + 4 & ":n" & i + 4
             If Len(s) > 200 Then
                s = Mid(s, 2)
                Range(s).ClearContents
                s = ""
             End If
         End If
     Next i
     If Len(s) Then
         s = Mid(s, 2)
         Range(s).ClearContents
     End If
End Sub
如果表中数据多而需要ClearContents的单元格很少,则可以试试find
etc.
发表于 2013-1-6 09:32 | 显示全部楼层
  1. Cells(Rows.Count, 1).End(3).Row
复制代码
1改成11,这样规范些。毕竟你循环多少行,是根据11列来的,而不是根据第1列来的。运行快与慢与电脑配置还有关系。
回复

使用道具 举报

发表于 2013-1-6 09:56 | 显示全部楼层
代码开头加上
  1. Application.ScreenUpdating = False
复制代码
代码结束处加上
  1. Application.ScreenUpdating = True
复制代码
最好是用数据的方法,这样是很费时的。
回复

使用道具 举报

 楼主| 发表于 2013-1-6 10:36 | 显示全部楼层
非常感谢两位的帮助,我全部改了,速度上大概还是需要3秒的时间。 还是很慢。不知道还有没有更好的方法
回复

使用道具 举报

发表于 2013-1-6 12:27 | 显示全部楼层
这样一行一行的处理,当然快不起来
改成成遍的处理就快了
回复

使用道具 举报

 楼主| 发表于 2013-1-6 13:43 | 显示全部楼层
青城山苦丁茶 发表于 2013-1-6 12:27
这样一行一行的处理,当然快不起来
改成成遍的处理就快了

苦于不知道怎么改啊, 你能帮我改下吗,麻烦你了。
回复

使用道具 举报

发表于 2013-1-6 15:00 | 显示全部楼层    本楼为最佳答案   
在某种情况下可以试下以下代码:
Sub 清除()
     Dim ar(), s$, i%
     Application.ScreenUpdating = 0
     i = Cells(Rows.Count, 1).End(3).Row
     ar = Cells(5, 11).Resize(i, 1).Value
     For i = 1 To UBound(ar)
         If ar(i, 1) = "—" Or ar(i, 1) = 0 Then
             s = s & ",b" & i + 4 & ":n" & i + 4
             If Len(s) > 200 Then
                s = Mid(s, 2)
                Range(s).ClearContents
                s = ""
             End If
         End If
     Next i
     If Len(s) Then
         s = Mid(s, 2)
         Range(s).ClearContents
     End If
End Sub
如果表中数据多而需要ClearContents的单元格很少,则可以试试find
etc.
回复

使用道具 举报

 楼主| 发表于 2013-1-6 15:13 | 显示全部楼层
虽然还看不懂,但是试过了  的确改变了速度,现在一秒也要不了了。 谢谢非常感谢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 12:26 , Processed in 0.292470 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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