【问题标题】:Excel Unhide Row based on value in a rangeExcel根据范围内的值取消隐藏行
【发布时间】:2013-05-22 11:11:46
【问题描述】:

我知道这里有很多关于在 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    让你的按钮调用这个子:

    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
    

    【讨论】:

    • 完美运行!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多