Excel宏显示/隐藏列基于下拉列表中的值

时间:2017-07-14 20:33:19

标签: excel vba excel-vba

我正在尝试在Excel 2016中创建一个宏,该宏根据包含在不同单元格中的下拉列表自动显示/隐藏列。下拉(在单元格“K7”中)当前正在使用Excel的数据验证,在不同的工作表中引用几千个单元格(即文本)的范围。

这是我当前的代码(感谢Busse!),我知道它没有自动显示/隐藏功能,可以根据用户在单元格“K7”中选择的内容即时显示/隐藏:

Sub Hide_Columns_Containing_Value()

    Dim c As Range

    For Each c In Range("R3:GJU3").Cells
        If c.Value Range("K7").Value Then
            Columns(c.Column).EntireColumn.Hidden = False
        End If
    Next c

End Sub

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在工作表中添加Worksheet_Change个事件。如果只想显示第3行中的值与K7匹配的列,则可以简化一点(不需要If语句)。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R, V
If Target.Address = ("$K$7") Then
    V = [K7].Value
    For Each R In Range("R3:GJU3")
        R.EntireColumn.Hidden = R.Value <> V
    Next
End If
End Sub

请注意,要获得列范围,您可以编写Columns(R.Column)R.EntireColumn

如果R3:GJU3范围内可能存在错误,请改用它。 在这里,如果出现错误,则会隐藏该列,但可以显示该列。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R, V
If Target.Address = ("$K$7") Then
    V = [K7].Value
    For Each R In Range("R3:GJU3")
        If IsError(R.Value) Then
            R.EntireColumn.Hidden = True
        Else
            R.EntireColumn.Hidden = R.Value <> V
        End If
    Next
End If
End Sub