如何在Excel中创建宏以隐藏其他列

时间:2018-03-02 14:11:37

标签: excel excel-vba vba

如何在Excel中创建宏以隐藏其他所有列

我目前有一个Excel电子表格,每列代表音乐文件中特定类型的数据(即艺术家,专辑,标题)。

我想要做的是通过为每种类型的数据(即artistOld,artistCurrent,albumOld,albumCurrent,titleOld,titleCurrent)提供两列来显示更改,但大多数时候用户不希望看到旧列我想要的是一个只显示/隐藏列的宏。

BTW我知道当你将鼠标悬停在一个单元格上时你可以添加注释(比如工具提示)所以理论上这将是一种存储旧数据的方法,但这不是我想要的。我希望用户能够同时查看所有数据,而不仅仅是某个特定字段的旧数据。

没有旧值列的屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:1)

这将隐藏所有偶数列:

Sub hiiddee()
    Dim i As Long
    Application.ScreenUpdating = False
        For i = 16384 To 2 Step -2
            Cells(1, i).EntireColumn.Hidden = True
        Next i
    Application.ScreenUpdating = True
End Sub

enter image description here

修改#1:

这是对BrandonBarney的想法的改编。它假定要隐藏/取消隐藏的列的列标题包含字符串 Old

Sub BrandonsIdea()
    Dim i As Long, KolKount As Long, r As Range

    With ActiveSheet.UsedRange
       KolKount = .Columns.Count + .Column - 1
    End With

    For i = 1 To KolKount
        With Cells(1, i)
        If InStr(1, .Value, "Old") > 0 Then
            .EntireColumn.Hidden = Not .EntireColumn.Hidden
        End If
        End With
    Next i
End Sub

每次运行时,都会切换隐藏/取消隐藏。

编辑#2一般说明:

宏非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要使用Excel中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

        http://www.mvps.org/dmcritchie/excel/getstarted.htm

        http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

        必须启用宏才能使其正常工作!

        修改#3:

        此版本将遍历所有工作表:

        Sub BrandonsIdea_2_The_Sequel()
            Dim i As Long, KolKount As Long, r As Range
            Dim sh As Worksheet
        
            For Each sh In Sheets
                With sh.UsedRange
                   KolKount = .Columns.Count + .Column - 1
                End With
        
                For i = 1 To KolKount
                    With sh.Cells(1, i)
                        If InStr(1, .Value, "Old") > 0 Then
                            .EntireColumn.Hidden = Not .EntireColumn.Hidden
                        End If
                    End With
                Next i
            Next sh
        End Sub
        

答案 1 :(得分:1)

正如我在评论中所述,首先尝试数据透视表方法。不要误会我的意思,我喜欢VBA,但我也知道SO上的许多用户会尝试将VBA用于琐碎的任务,而这些解决方案往往很脆弱。我非常支持在VBA之前学习Excel。

这是我的样本表。请注意,这是表格。如果您有结构化数据,应格式化为表格,名称有意义。选择CTRL+T以格式化为表格。

Sample Table

接下来,我插入一个数据透视表:

Pivot Table Example

让我们在没有额外列的情况下复制我们的表格:

Pivot Table Example 2

通过去设计'关闭Grand Totals以及小计,让它变得漂亮和漂亮。将报表布局更改为表格,并重复所有项目标签:

enter image description here

而且瞧!现在我可以在原始表格中添加我想要的任何内容并点击Refresh按钮,它可以很好地工作,或者我可以通过从行中删除它来轻松地添加/删除我的数据库中的列。我还可以添加摘要(例如歌曲数量?)作为聚合。