Скрыть Показать Specifi c Комплекс колонн - PullRequest
1 голос
/ 26 апреля 2020

Прежде всего, я n00b и здесь, и с VBA.
Я также потратил несколько часов на чтение похожих проблем, которые я пытался решить с небольшим успехом. Я пытаюсь придумать способ скрыть / показать указанные c столбцы, основанные на значении ячейки "A1". Проблема в том, что у меня есть около 200 столбцов, и единственный способ, которым я смог управлять, - это многострочный код со всеми диапазонами (см. Ниже).

Мне было интересно две вещи:

1) Есть ли более эффективный способ кодирования, чтобы мне не понадобилось так много строк? и 2) в идеале: есть ли способ кодирования этого, чтобы он действительно смотрел на значение в строке Excel и скрывал те столбцы, для которых ячейки не содержат «Q1»?

Спасибо, ребята: )

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "A1" Then
    Columns("G:I").Hidden = Target.Value = "Q1"
    Columns("K:Z").Hidden = Target.Value = "Q1"
    Columns("AB:AQ").Hidden = Target.Value = "Q1"
    Columns("AS:BH").Hidden = Target.Value = "Q1"
    Columns("BJ:BY").Hidden = Target.Value = "Q1"
    Columns("CA:CP").Hidden = Target.Value = "Q1"
    Columns("CR:DG").Hidden = Target.Value = "Q1"
    Columns("CR:DG").Hidden = Target.Value = "Q1"
    Columns("DI:DX").Hidden = Target.Value = "Q1"
    Columns("DZ:EO").Hidden = Target.Value = "Q1"

... et c.

enter image description here

1 Ответ

0 голосов
/ 26 апреля 2020

Немного догадываясь о том, что вы действительно хотите сделать ...

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng as range, c as range, rngHide as range
    If Target.Address() = Me.Range("A1").Address() Then
        set rng = me.range("G14:EO14")
        rng.entirecolumn.hidden = false
        If target.value = "ALL" then exit sub '<<< show all
        for each c in rng.cells
            If c.value <> Target.Value then
                if rngHide is nothing then
                    set rngHide = c
                Else
                    set rngHide = Application.Union(rngHide, c)
                end if
            end if
        next c  
        If not rngHide is nothing then rnghide.entirecolumn.hidden = true
     End if
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...