0

列 E のセル値が 0 (ゼロ) の場合、対応する行を自動的に非表示/非表示にしようとしています。これらのセルには数式があり、別のセルのセルが変更されると、これらの数式はゼロを返します。その変更時に、コードで非表示/非表示の魔法を実行したいと思います。

大変助かりました。

4

2 に答える 2

1

AutoFilter を使用した高速な方法を次に示します。このコードを直接呼び出すか、Worksheet_Calculateイベントで使用できます。セルE1にヘッダーがあると仮定しています。

ボタンで

Option Explicit

Sub Sample()
    Dim rRange  As Range, RngToHide As Range
    Dim lRow As Long

    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False

    With Sheets("Sheet1")
        lRow = .Range("E" & Rows.Count).End(xlUp).Row
        Set rRange = .Range("E1:E" & lRow)

        With rRange
          .AutoFilter Field:=1, Criteria1:="0"
          Set RngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With
    End With

    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False

    If Not RngToHide Is Nothing Then RngToHide.Hidden = True
End Sub

ワークシート計算イベント - 非推奨

非表示の行で何かを変更したい場合に行を再表示できないため、このコードを自動的に呼び出すことはお勧めしません。行を再表示するには、イベント内のコード全体をコメント アウトするかWorksheet_Calculate、接続されたセルの値をゼロ以外の値に変更する必要があります (接続されたセルが非表示の行にない場合)。

これにより、Col E の値が0

Option Explicit

Private Sub Worksheet_Calculate()
    Dim rRange  As Range, RngToHide As Range
    Dim lRow As Long

    On Error GoTo Whoa

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False

    With Sheets("Sheet1")
        lRow = .Range("E" & Rows.Count).End(xlUp).Row
        Set rRange = .Range("E1:E" & lRow)

        With rRange
          .AutoFilter Field:=1, Criteria1:="0"
          Set RngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With
    End With

    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False

    If Not RngToHide Is Nothing Then RngToHide.Hidden = True

LetsContinue:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2012-06-08T16:46:33.230 に答える
0

次のメソッドを使用します。

Sub HideRows()
Dim i As Integer
i = 1
Do While Not Cells(i, 5) = ""
    If Cells(i, 5).Value = 0 Then
        Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True
    ElseIf Cells(i, 5).Value <> 0 And Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True Then
        Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = False
    End If
i = i + 1
Loop
End Sub

Button_Clickボタンを追加して、イベントによってこのメソッドを呼び出すか、Microsoft Excel オブジェクトの必要なシートに次のメソッドを追加できます。

Private Sub Worksheet_Change()
    Module1.HideRows
End Sub 

HideRowこのメソッドは、一部のセルが変更されたときにメソッドを呼び出します。

于 2012-06-08T12:56:02.760 に答える