Чтобы скрыть все строки, если значение в столбце I равно 0, в зависимости от раскрывающегося списка в ячейке D3

Чтобы скрыть все строки, если значение в столбце I равно 0, в зависимости от раскрывающегося списка в ячейке D3

У меня есть раскрывающийся список в ячейке D3. После того, как вы меняете D3, значения строк меняются, некоторые с числами больше/меньше 0, а некоторые остаются с точным 0 в столбце I. Мне нужен макрос, который будет цикличным, и результатом должно быть то, что когда я меняю D3, вся информация с точным значением 0 в столбце I будет скрыта, НО когда я снова меняю D3, он сбросится и снова скроет все строки, которые включают 0 в столбце I.

решение1

Чтобы запустить макрос при изменении на листе, вы можете поместить подпрограмму на рабочий лист, используя
событие Worskheet.Change:Private Sub Worksheet_Change(ByVal Target As Range)

Для цикла столбца "I" есть несколько способов его циклического прохождения. Мы можем определить диапазон и сделать цикл For each, или мы можем использовать итерируемый объект.

Чтобы избежать зацикливания всего столбца, мы можем найти последнюю использованную строку столбца несколькими способами, Cells(Rows.Count, 9).End(xlUp).Rowвот один из них.

Проверка значения ячейки в цикле достаточно проста, и чтобы скрыть строку, мы можем просто использоватьRange.EntireRow.Hidden = True

Все это может выглядеть примерно так:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim hide As Boolean, i As Long
'Intersect validates that the change is only happening in "D3" to be valid
If Not Intersect(Target, Range("D3")) Is Nothing And Target.Count = 1 Then
' i = starting range - to - last row    
    For i = 4 To Cells(Rows.Count, 9).End(xlUp).Row
        hide = False
        If Cells(i, 9).Value = "0" Then hide = True
        Cells(i, 9).EntireRow.Hidden = hide
    Next i
End If
End Sub

Связанный контент