Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Скрытие/отображение строк в зависимости от значения ячейки

Автор geroimm, 23.09.2023, 10:41:55

« назад - далее »

geroimm

Добрый день! Нужна помощь опытных форумчан

Имеется таблица из трёх листов: "Лист1", "Лист2" и "Лист3".
На Лист1 в ячейке J15 имеется Раскрывающийся список со значениями: А, Б и В.
На всех листах первый столбец содержит значение: А, Б, В или пусто.
На всех листах пятая строка содержит значение: А, Б, В или пусто.
Необходим скрипт, который:
- скрывает строки и столбцы Б и В при выборе значения А из списка
- скрывает строки и столбцы В при выборе значения Б из списка
- скрывает строки и столбцы Б при выборе значения В из списка.

Все обозначения условные

В xlsm-файле у меня был такой скрипт (немного другая реализация, но он работал. Его и надо перенести в гугл-таблицы, добавив значение В):
[spoiler]Option Explicit

Option Base 1

Sub WorkSheet_Change(ByVal Target As Range)
    Dim i&, j&, sh&, arr, s&, rng As Range
    If Target.Address <> "$L$11" Then Exit Sub
    Application.ScreenUpdating = False
    s = Range("Q29").Value
    Select Case s
    Case 1: arr = Array("А")
    Case 2: arr = Array("Б")
    End Select
    For sh = 2 To Worksheets.Count
        With Sheets(sh)
            .UsedRange.Rows.Hidden = False
            .UsedRange.Columns.Hidden = False
            'скрываем строки
            Set rng = Nothing
            For i = .UsedRange.Row To .Cells(.Rows.Count, 1).End(xlUp).Row
                For j = 1 To UBound(arr)
                    If .Cells(i, 1) = arr(j) Then
                        If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i))
                    End If
                Next j
            Next i
            If Not rng Is Nothing Then rng.Rows.Hidden = True
            'скрываем столбцы
            Set rng = Nothing
            For i = 1 To .Cells(2, .Columns.Count).End(xlToLeft).Column
                For j = 1 To UBound(arr)
                    If .Cells(2, i) = arr(j) Then
                        If rng Is Nothing Then Set rng = .Columns(i) Else Set rng = Union(rng, .Columns(i))
                    End If
                Next j
            Next i
            If Not rng Is Nothing Then rng.Columns.Hidden = True

        End With
    Next
    Application.ScreenUpdating = True
End Sub

[/spoiler]

Яндекс.Метрика Рейтинг@Mail.ru