Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Макрос на скрытие определенных строк по условию в ячейке
 
Добрый день форумчане! Просьба помочь с написанием несложного макроса. Суть в чём: есть диапазон скрытия строк (10:33), нужно чтобы при изменении в ячейке "C4" значений от A до D (сделал выпадающий список) скрывались строки по следующему принципу: Если стоит значение "A" - то скрыть все строки не относящиеся к этому диапазону (16:33), для "B" - скрыть строки 10:15 и 22:33, для "С" - 10:21 и 28:33, для D - 10:27.
Проще говоря для каждого значения ячейки "C4" должны быть ОТКРЫТЫ только соответствующие ему строки.

Для наглядности в файле раскрасил диапазоны разными цветами. Итого при значении "A" -должен остаться только зеленый диапазон, для значения "B" только желтый и так далее по списку. (PS скрытие строк не по условию цвета а по значению в ячейке "C4")
 
По данному вопросу (скрытие/отображение строк) уже немало тем и готовых макросов. В чём сложность на основании имеющихся макросов написать под свою задачу?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Вчера весь день и всю ночь искал, все рядом да около. Но только сейчас сам написал. Осенило:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$4" Then
    Rows("10:33").EntireRow.Hidden = False
    If Target.Value = "A" Then
    Rows("16:33").EntireRow.Hidden = True
    End If
    If Target.Value = "B" Then
    Range("A22:A33,A10:A15").EntireRow.Hidden = True
    End If
    If Target.Value = "C" Then
    Range("A28:A33,A10:A21").EntireRow.Hidden = True
    End If
    If Target.Value = "D" Then
    Range("A10:A27").EntireRow.Hidden = True
    End If
End If
End Sub
Изменено: bosikan - 11 Окт 2018 15:50:50
 
И еще подсказали на другом форуме
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c4]) Is Nothing And Target.Count = 1 Then
        Dim a As Range: Set a = Rows("10:15")
        Dim b As Range: Set b = Rows("16:21")
        Dim c As Range: Set c = Rows("22:27")
        Dim d As Range: Set d = Rows("28:33")
        Select Case (Target)
            Case "A": a.EntireRow.Hidden = False: b.EntireRow.Hidden = True: c.EntireRow.Hidden = True: d.EntireRow.Hidden = True
            Case "B": a.EntireRow.Hidden = True: b.EntireRow.Hidden = False: c.EntireRow.Hidden = True: d.EntireRow.Hidden = True
            Case "C": a.EntireRow.Hidden = True: b.EntireRow.Hidden = True: c.EntireRow.Hidden = False: d.EntireRow.Hidden = True
            Case "D": a.EntireRow.Hidden = True: b.EntireRow.Hidden = True: c.EntireRow.Hidden = True: d.EntireRow.Hidden = False
            
        End Select
    End If
End Sub

Только здесь при изменении других любых ячеек скрытие строк "слетает". Как исправить?
Изменено: bosikan - 11 Окт 2018 16:00:06
 
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Разобрался, еще раз спасибо!
 
Если в каждом Case выполняется одно и то же действие rngAll.EntireRow.Hidden = True, то можно сократить код;
Код
Dim rngAll As Range: Set rngAll = Rows("10:33")        
rngAll.EntireRow.Hidden = True
Select Case (Target)
            Case "A": a.EntireRow.Hidden = False
            Case "B": b.EntireRow.Hidden = False
            Case "C": c.EntireRow.Hidden = False
            Case "D": d.EntireRow.Hidden = False
End Select
Изменено: Ts.Soft - 11 Окт 2018 16:41:21
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, можно. Я исходил из того, если через буфер обмена в яч. вставят что-либо кроме того, что допустимо правилами.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, как раз в таком случае всё скроется и заставит пользователя подумать: а то ли я нажал? :)
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, можно и так. Исходил из того, что если ничего не изменилось, то значит что-то не то сделали.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Читают тему (гостей: 1)
Наверх