首页 > 解决方案 > 隐藏显示特定列复杂

问题描述

首先,我在这里和 VBA 都是 n00b。
我还花了几个小时阅读与我试图解决的问题类似的问题,但收效甚微。我试图想出一种基于单元格“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"

...ETC。

在此处输入图像描述

标签: excelvba

解决方案


猜测一下你真正想做的事情......

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

推荐阅读