首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么一个小的Excel VBA宏运行得非常慢

为什么一个小的Excel VBA宏运行得非常慢
EN

Stack Overflow用户
提问于 2013-09-19 22:07:39
回答 7查看 34.9K关注 0票数 4

我正在写一个简短的宏来隐藏所有没有当前销售额的客户。YTD销售列在K栏(特别是K10-250)。这些单元格使用vlookup从我们转储数据的另一个选项卡中提取数据。我的问题是,为什么这个宏要运行10-15分钟?我在另一个电子表格上有一个类似的宏,它只需2-3分钟就可以处理1,500多行。我已经关闭了屏幕更新。我想不出还有什么能加快速度的。

代码语言:javascript
运行
复制
   Sub HideNoSlackers()
'
' HideNoSlackers Macro
'

'
Application.ScreenUpdating = False
'
 Sheets("CONSOLIDATED DATA").Select
 Dim cell As Range
 For Each cell In Range("K10:K250")
   If cell.Value = 0 Then
     cell.EntireRow.Hidden = True
   Else
     cell.EntireRow.Hidden = False
   End If
 Next
End Sub
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-09-19 23:25:18

您可能希望在隐藏行之前将计算设置为“手动”?此外,在您的情况下,您还可以去掉If语句。试试这个:

代码语言:javascript
运行
复制
Sub HideNoSlackers()
    Dim cell As Range, lCalcState As Long

    Application.ScreenUpdating = False
    ' Record the original Calculation state and set it to Manual
    lCalcState = Application.Calculation
    Application.Calculation = xlCalculationManual
    For Each cell In ThisWorkbook.Worksheets("CONSOLIDATED DATA").Range("K10:K250")
        cell.EntireRow.Hidden = (cell.Value = 0)
    Next
    ' Restore the original Calculation state
    Application.Calculation = lCalcState
    Application.ScreenUpdating = True ' Don't forget set ScreenUpdating back to True!
End Sub
票数 4
EN

Stack Overflow用户

发布于 2013-09-19 23:13:03

代码语言:javascript
运行
复制
Sub HideNoSlackers()
 Dim cell As Range, rng As Range, rngHide As Range

    Set rng = Sheets("CONSOLIDATED DATA").Range("K10:K250")
    rng.EntireRow.Hidden = False

    For Each cell In rng.Cells
        If cell.Value = 0 Then
            If Not rngHide Is Nothing Then
                Set rngHide = Application.Union(rngHide, cell)
            Else
                Set rngHide = cell
            End If
        End If
    Next

    If Not rngHide Is Nothing Then rngHide.EntireRow.Hidden = True
End Sub
票数 3
EN

Stack Overflow用户

发布于 2013-09-19 22:36:59

你为什么要用宏来做这个?

如果在数据上创建一个表,则可以在sales列上设置一个筛选器,该筛选器将只显示sales<> 0中的那些内容。

宏在excel中很有用,但是人们求助于宏的大多数操作都可以在excel中本地完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18905724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档