Excel根据范围中的值取消隐藏行

时间:2013-05-21 19:45:45

标签: excel-vba vba excel

我知道这里有很多关于在excel-vba中隐藏和取消隐藏行的问题,但我似乎无法让我的代码工作......

我正在制作一个电子表格,其中列出了月份总数。我希望工作表隐藏任何未显示在工作表中的任何月份的行。

对于前。如果1月份的列表中没有数据,则隐藏1月份总计行。一旦有人将列表中的数据放入列表中,那么该行将取消隐藏。

我知道脚本不会一直运行,所以我添加了一个“月份重置”按钮来运行脚本并隐藏/取消隐藏所有适当的行。

出于某种原因,每次按下按钮时,无论数据是否在下面的列表中,该行都会消失。到目前为止,我只编写了1月份行的代码:

Private Sub CommandButton1_Click()
Sheets("Master Pipeline").Select
For Each cell In Range("B16:B100")
If cell.Value = "January" Then
Range("A3").EntireRow.Hidden = False
Else
Range("A3").EntireRow.Hidden = True
End If
Next
End Sub

细胞A3:A14列出了它们在其旁边的细胞中的总数。 行16:100有数据列表,B列有月份。

请帮忙......

提前致谢,

LT

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容隐藏数据范围中缺少的任何月份。请注意,您不需要(也不应该)每个月编写代码。另请注意,查找范围内的值比循环遍历数据范围更有效。

让你的按钮调用这个子:

Sub HideMissingMonths()
    Dim ws As Worksheet
    Dim months As Range
    Dim data As Range
    Dim cell As Range
    Dim found As Range    

    Set ws = ThisWorkbook.Sheets("Master Pipeline")
    Set months = ws.Range("A3:A14")
    Set data = ws.Range("B16:B100")

    Application.ScreenUpdating = False

    ' unhide all months before we begin
    months.EntireRow.Hidden = False

    For Each cell In months
        Set found = data.Find(what:=cell, LookIn:=xlValues)
        If found Is Nothing Then cell.EntireRow.Hidden = True
    Next cell

    Application.ScreenUpdating = True
End Sub