Excel使用动态宏过滤/隐藏列

时间:2016-03-29 14:51:23

标签: excel excel-vba macros vba

我的电子表格非常庞大,数百列数千或数行,我可以选中复选框来确定显示哪些列。问题是我现在想要根据每个列顶部的单元格值对列进行分组(第10行)。这将允许类别是动态的,并允许项目从一个类别更改为另一个类别,并根据该类别的复选框状态隐藏或显示。

我目前在宏中允许复选框在每个团队的隐藏和可见之间切换的代码如下所示。它们目前按20组分组,我想消除20的静态分组,并将其替换为第10行中的单元格包含类别的列数组(在此示例中目前为“Team 1”。

Sub Team1()
Set target = Range("B1")
If target.Value = "TRUE" Or target.Value = "True" Then
    ActiveSheet.Columns("F:Y").EntireColumn.Hidden = False
ElseIf target.Value = "FALSE" Or target.Value = "False" Then
    ActiveSheet.Columns("F:Y").EntireColumn.Hidden = True
End If
End Sub

1 个答案:

答案 0 :(得分:1)

您可以使用For循环检查每个Columns Row 10值,然后相应地设置.hidden的{​​{1}}属性:

entireColumn

Sub Team1() Dim target As Range Dim checkCell As Range Set target = Range("B1") For Each checkCell In Range("F10:Y10").Cells checkCell.EntireColumn.Hidden = (LCase(target.Value) = "true" And checkCell.Value = "Team 1") Next checkCell End Sub 循环将遍历For Each cell中的每个range

此处F10:Y10不需要IF... Then,因为.Hiddentrue/false分配。 (LCase(target.Value) = "true" And checkCell.Value = "Team 1")位将返回TrueFalse,具体取决于这两个条件。