1

在 VBA 中编写宏代码时,我是一个新手。我正在使用 Excel 2010,我想我有一个简单的问题。我想在我的工作表中隐藏满足在 AJ 列中具有零和结果的条件的行。我能够弄清楚如何为一行执行此操作,然后为随后的每一行重复此操作,但我知道必须有更好/更有效的方法来编写此代码。谁能帮我改写这段代码,以便将第 8-14 行的范围全部考虑在内,而不是一次考虑每一行?这将减少我的运行时间并减少出错的可能性。先感谢您!

Sub Hide_1()
'

' Master Macro
     If ActiveSheet.Range("AJ8") = 0 Then
        Rows("8").EntireRow.Hidden = True
     End If

    If ActiveSheet.Range("AJ9") = 0 Then
        Rows("9").EntireRow.Hidden = True
    End If

    If ActiveSheet.Range("AJ10") = 0 Then
        Rows("10").EntireRow.Hidden = True
    End If

    If ActiveSheet.Range("AJ11") = 0 Then
        Rows("11").EntireRow.Hidden = True
    End If

    If ActiveSheet.Range("AJ12") = 0 Then
        Rows("12").EntireRow.Hidden = True
    End If

    If ActiveSheet.Range("AJ13") = 0 Then
        Rows("13").EntireRow.Hidden = True
    End If

    If ActiveSheet.Range("AJ14") = 0 Then
        Rows("14").EntireRow.Hidden = True
    End If
End Sub
4

3 回答 3

0

怎么样:

Public Sub HideEntireRow(cellToCheck As range, valueToHide As Variant)
    If cellToCheck.Value2 = valueToHide Then cellToCheck.EntireRow.Hidden = True
End Sub

Public Sub Hide_2()
    Dim cell As range
    For Each cell In ActiveSheet.range("AJ10:AJ14")
        Call HideEntireRow(cell, 0)
    Next cell
End Sub
于 2013-07-08T20:07:56.793 回答
0

这将遍历您的范围并隐藏值为 0 的行:

Sub HideRows()
    Dim rng As Range, cl As Range

    Set rng = Range("AJ8:AJ14")

    For Each cl In rng
        If cl = 0 Then
            cl.EntireRow.Hidden = True
        End If
    Next cl
End Sub
于 2013-07-08T20:08:09.003 回答
0

对于您正在使用的小范围,自动过滤器不会提供任何可见的性能提升,但您应该默认使用自动过滤器而不是循环。有很多情况需要循环,但这似乎不是其中之一。

以下是过滤工作表的方法(从第 8 行开始),隐藏 AJ 列中为 0 的所有行。请注意,我正在计算工作表中的最后一行。如果您需要对特定范围进行硬编码,您可以轻松地对其进行修改:

Sub FilterZeroRows()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Range("AJ" & ws.Rows.Count).End(xlUp).Row
    Set rng = ws.Range("AJ8:AJ" & lastRow)
    ' keep any rows that don't have 0 visible
    rng.AutoFilter field:=1, Criteria1:="<>0"
End Sub
于 2013-07-08T20:22:50.443 回答