Страницы: 1
RSS
Автоматическое скрытие и показ строк по условию
 

Есть тема на форуме старая https://www.planetaexcel.ru/techniques/9/121/ и вроде много написано комментарий, но не нашел то, что мне нужно. Не могу сделать так, чтоб макрос автоматический показывал строки после заполнения ячейки, скрывать он скрывает, а показывать не хочет. Мне нужно, чтоб если в ячейках в промежутке от D12 до D34 появляется 0, строка на которой 0 - скрылась и если там не 0, строка показывалась автоматический. Как мне дописать макрос, чтоб он это делал автоматический?

Код
Private Sub Worksheet_Calculate()
         Dim cell As Range
         Application.ScreenUpdating = False
         For Each cell In ActiveSheet.Range("D12:D34").Cells
         If cell.Value = "0" Then cell.EntireRow.Hidden = True
         Next
         Application.ScreenUpdating = True
End Sub

 
Цитата
Айдар Ситдиков написал:
от D12 до D34 появляется 0
каким образом он там появляется? из-за изменний ячеек K2:K12?
Изменено: Mershik - 27.02.2021 20:11:33
Не бойтесь совершенства. Вам его не достичь.
 
Да, после ввода данных формулы пересчитывают значения. Если в К2:К12 нету какой-то позиции возникает 0 значение.
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    lrSh = Sheets(ActiveSheet.Name).Columns(11).Find("*", SearchDirection:=xlPrevious, LookIn:=xlValues).Row '
    Set KeyCells = Range("k1:k" & lrSh)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
    For i = 12 To 34
        If Cells(i, 4) = 0 And Len(Cells(i, 4) = 0) > 0 Then
            Rows(i).EntireRow.Hidden = True
            Else: Rows(i).EntireRow.Hidden = False
        End If
    Next i
End If
End Sub
Быстрее молнии, быстрее ветра, быстрее калькулятора
 
Цитата
Borrusale написал:
Быстрее молнии, быстрее ветра, быстрее калькулятора
Здорово, но он не должен скрывать строки пустые, только с нулем. ))
 
Borrusale, Все, сделал, чтоб пустые не скрывал. Спасибо большое! Вопрос: мне не совсем понятно почему он смотрит диапазон k? если я начну это макрос вставлять в другие калькуляции получается он встанет? Можно ли сделать, чтоб он смотрел только диапазон где меняются значения не используя диапазон, где вводятся значения?
 
Айдар Ситдиков,
Цитата
Айдар Ситдиков написал:
где вводятся значения?
вы предлгаете запускать макрос каждый раз когда происходят изменения в ячейках? представляете на любой чих запускается макрос...
Не бойтесь совершенства. Вам его не достичь.
 
Теперь понял для чего это нужно. Спасибо за разъяснение.
 
Что нужно дописать, чтоб макрос не пересчитывал на других открытых книгах? При внесений изменений он долго все пересчитывает, мало того замечал в открытой другой книге на втором мониторе вижу как по строкам сверху вниз пробегает то ли пересчет то ли проверка.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim KeyCells As Range
   lrSh = Sheets(ActiveSheet.Name).Columns(11).Find("*", SearchDirection:=xlPrevious, LookIn:=xlValues).Row '
   Set KeyCells = Range("i1:x15" & lrSh)
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
    For i = 19 To 66
        If Cells(i, 4) = "0" And Len(Cells(i, 4) = "0") > "0" Then
           Rows(i).EntireRow.Hidden = True
            Else: Rows(i).EntireRow.Hidden = False
        End If
   Next i
End If
End Sub
Страницы: 1
Наверх