Excel VBA - 通过颜色比较行来缩短时间

时间:2015-04-23 12:06:09

标签: excel-vba vba excel

在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的初学者,所以也许我没有看到更简单的解决方案

2 个答案:

答案 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