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

时间:2016-05-06 16:59:51

标签: excel excel-vba if-statement vba

我的电子表格布局有重复的行,用于手动验证数据。专栏" I"包含一个带有3个选项的数据验证下拉列表。我试图保留一个额外的专栏" K"隐藏除非(罕见)情况选项" N / A"从下拉列表中选择。

    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

我的代码可能有点粗糙,但是当选择正确的标准时,它至少会取消隐藏列。我的问题是,如果给另一个单元格一个不需要附加列的选择,它会再次隐藏该列。我错过了什么?是否存在允许某些内容的功能:

'如果在范围内有任何'

2 个答案:

答案 0 :(得分:0)

尝试添加我的AnyNA功能。它遍历整个列以检查N / A,并且在找不到任何内容时不会隐藏。

似乎你只想考虑隐藏它是否隐藏,反之亦然,所以我为你优化。同时删除了多余的“= True”并将子名称更改为“隐藏”和“取消隐藏”以便清晰。

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

答案 1 :(得分:0)

在@Sean Scott的帮助下,我找到了解决方案:

    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