我正在写一个简短的宏来隐藏所有没有当前销售额的客户。YTD销售列在K栏(特别是K10-250)。这些单元格使用vlookup从我们转储数据的另一个选项卡中提取数据。我的问题是,为什么这个宏要运行10-15分钟?我在另一个电子表格上有一个类似的宏,它只需2-3分钟就可以处理1,500多行。我已经关闭了屏幕更新。我想不出还有什么能加快速度的。
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
发布于 2013-09-19 23:25:18
您可能希望在隐藏行之前将计算设置为“手动”?此外,在您的情况下,您还可以去掉If
语句。试试这个:
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
发布于 2013-09-19 23:13:03
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
发布于 2013-09-19 22:36:59
你为什么要用宏来做这个?
如果在数据上创建一个表,则可以在sales列上设置一个筛选器,该筛选器将只显示sales<> 0中的那些内容。
宏在excel中很有用,但是人们求助于宏的大多数操作都可以在excel中本地完成。
https://stackoverflow.com/questions/18905724
复制相似问题