列 E のセル値が 0 (ゼロ) の場合、対応する行を自動的に非表示/非表示にしようとしています。これらのセルには数式があり、別のセルのセルが変更されると、これらの数式はゼロを返します。その変更時に、コードで非表示/非表示の魔法を実行したいと思います。
大変助かりました。
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
次のメソッドを使用します。
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
このメソッドは、一部のセルが変更されたときにメソッドを呼び出します。