基于单元格值在Excel中隐藏列

我想隐藏我的Excel工作表(称为“模板帐户”)中的某些列根据在单元格AC5中select一个select列表中的值。

逻辑如下:

1)如果单元格AC5中的选项列表值是“能源和资源”,那么我想要隐藏BJ:BO列。

2)如果单元格AC5中的选项列表值是“国防”,那么我想要隐藏BP:CA列等。

3)否则,如果AC5不包含AC5中的选项列表值,则不要隐藏任何内容

我尝试的代码看起来像这样,但它不起作用。 有人可以给我提供一些input吗?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim cellvalue As String Dim ws As Worksheet Set ws = Sheet("Template account") If cellvalue Like "*Energy and Resources*" Then Columns("BJ:BO").EntireColumn.Hidden = True Else If cellvalue Like "*Defence*" Then Columns("BP:CA").EntireColumn.Hidden = True Else Exit Sub End If End Sub 

要检测单元格值的更改,您必须使用Worksheet_Change()事件处理程序

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 Select Case Target.Value '<-- act correspondingly to changed cell value Case "Energy and Resources" Columns("BJ:BO").EntireColumn.Hidden = True Case "Defence" Columns("BP:CA").EntireColumn.Hidden = True Case "...." ' go on with other cases End Select End If End Sub 

如果当“能量和资源”和“防御”都不是改变的拾取单元的值时,要取消隐藏列BJ:BO和BP:CA,则代码在Select Case块的最后部分略微改变

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 Select Case Target.Value '<-- act correspondingly to changed cell value Case "Energy and Resources" Columns("BJ:BO").EntireColumn.Hidden = True Case "Defence" Columns("BP:CA").EntireColumn.Hidden = True Case Else Union(Columns("BJ:BO"), Columns("BP:CA")).EntireColumn.Hidden = False End Select End If End Sub 

将您的代码放在Workbook_SheetChange 。 目前您所处的事件只会在您select不同单元格时触发,而不是在单元格中发生实际更改时触发。 另外,@BruceWayne指出,你绝不会将单元格AC5的值传递给你的cellvaluevariables。 代码有一些变化:

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "Template account" And Target.Address = "$AC:$5" Then Application.EnableEvents = False Dim cellvalue As String cellvalue = Target.Value2 If cellvalue Like "*Energy and Resources*" Then Sh.Columns("BJ:BO").EntireColumn.Hidden = True ElseIf cellvalue Like "*Defence*" Then Sh.Columns("BP:CA").EntireColumn.Hidden = True Else Sh.Columns("BJ:BO").EntireColumn.Hidden = False Sh.Columns("BP:CA").EntireColumn.Hidden = False End If Application.EnableEvents = False End If End Sub 

添加了一个检查,以确认更改是在正确的工作表和单元格上。 代码运行时禁用事件,隐藏列不会再次触发事件。 最后启用。 增加了在Else上再次显示的列。 没有testing过。