如果范围内的任何单元格符合标准,则尝试取消隐藏其他列

我的电子表格用重复的行进行布局,以便手动validation数据。 列“I”包含一个通过数据validation下拉3个选项。 我试图保留一个额外的列“K”隐藏除非(罕见)的情况下,选项“N / A”是从下拉列表中select。

Private Sub Worksheet_Change(ByVal Target As Range) If Columns("K").EntireColumn.Hidden = True Then If Target.Value = "N/A" Then Act3 Else Act4 End If Else Act4 End If End Sub Sub Act3() Columns("K").EntireColumn.Hidden = False End Sub Sub Act4() Columns("K").EntireColumn.Hidden = True End Sub 

我的代码可能有点粗糙,但是当select正确的标准时,它至less会取消隐藏列。 我的问题是,如果另一个单元格被选中,不需要额外的列,然后再次隐藏列。 我错过了什么? 是否有一个function,允许沿线的东西:

'如果任何在范围然后'

尝试添加我的AnyNAfunction。 它通过你的整个专栏来检查N / A,并且在find任何信息时不会隐藏。

看来你只想隐藏,如果它不隐藏,反之亦然,所以我为你优化。 也清除多余的“=真”,并将子名称更改为“隐藏”和“取消隐藏”。

 Private Sub Worksheet_Change(ByVal Target As Range) If Columns("K").EntireColumn.Hidden And Target.Value = "N/A" Then Unhide ElseIf Not Columns("K").EntireColumn.Hidden And Not AnyNA Then Hide End If End Sub Private Function AnyNA() As Boolean For Row = 1 To Range("J" & Rows.Count).End(xlUp).Row If Range("J" & Row).Value = "N/A" Then AnyNA = True Exit Function End If Next AnyNA = False End Function Sub Unhide() Columns("K").EntireColumn.Hidden = False End Sub Sub Hide() Columns("K").EntireColumn.Hidden = True End Sub 

在@Sean Scott的帮助下,我find了解决办法:

  Sub Worksheet_Change(ByVal Target As Range) If Columns("K").EntireColumn.Hidden Then If Target.Value = "N/A" Then UnhideDocs End If ElseIf Not Columns("K").EntireColumn.Hidden And Not Target.Value = "N/A" Then HideDocs End If End Sub Function AnyNA() As Boolean For Row = 1 To Range("K" & Rows.Count).End(xlUp).Row If Range("K" & Row).Value = "N/A" Then AnyNA = True End If Next AnyNA = False End Function Sub UnhideDocs() Columns("K").EntireColumn.Hidden = False End Sub Sub HideDocs() Columns("K").EntireColumn.Hidden = True End Sub