在Excel中,我有一个元素列表。每行都有一种颜色。 对于每种颜色,我创建一个按钮,隐藏其他行。
例如,如果我点击红色按钮,则隐藏所有非红色的行。
还有一个重置按钮可以取消隐藏所有行 代码如下:
Sub Red_Click()
Dim Color_Index As Long
Color_Index = Range("I1").Interior.ColorIndex
Call HideOther(Color_Index)
End Sub
Sub Green_Click()
Dim Color_Index As Long
Color_Index = Range("E1").Interior.ColorIndex
Call HideOther(Color_Index)
End Sub
Sub HideOther(Color_Index)
Set rRange = Range("$A4:$A313")
For Each cl In rRange
currentColIndex = cl.Interior.ColorIndex
If currentColIndex <> Color_Index Then
cl.EntireRow.Hidden = True
End If
Next cl
End Sub
Sub Reset()
Cells.EntireRow.Hidden = False
End Sub
我将每一行颜色与我的颜色进行比较。
我有300行所以需要一些时间(大约15秒),有没有办法改善时间?我问这个是因为重置/取消隐藏功能是立即的。
我是excel的初学者,所以也许我没有看到更简单的解决方案
答案 0 :(得分:1)
正如评论中所说,关闭屏幕更新将有所帮助。根据您的数据,关闭计算也可能会有所帮助。
除此之外,速度的主要改进是一次隐藏所有行:
chrome.fileSystem
答案 1 :(得分:0)
我认为它会稍微快一些,因为我预先定义了更少的东西并使用了定义的变量(即我不知道我在做什么)。
Sub Red_Click()
Dim Color_Index As Long
Color_Index = Range("I1").Interior.ColorIndex
Call HideOther(Color_Index)
End Sub
Sub Green_Click()
Dim Color_Index As Long
Color_Index = Range("E1").Interior.ColorIndex
Call HideOther(Color_Index)
End Sub
Sub HideOther(Color_Index As Long)
For Each Cell In Range("$A4:$A313") 'why define something when you're
If Cell.Interior.ColorIndex <> Color_Index Then Cell.EntireRow.Hidden = True 'using it but once
Next
End Sub
Sub Reset()
Cells.EntireRow.Hidden = False
End Sub