隐藏/显示不必要的行和列

问题的形成

假设我们有一张桌子,我们必须每天“跳舞”:

 

对于那些人来说,这张桌子似乎很小——在心里把它乘以面积二十倍,再加上几个街区和两打大城市。 

任务是暂时从屏幕上删除当前不需要工作的行和列,即 

  • 按月隐藏细节,只留下季度
  • 按月份和季度隐藏总计,只留下半年的总计
  • 隐藏目前不需要的城市(我在莫斯科工作——我为什么要看圣彼得堡?)等等。

在现实生活中,有大量此类表格的示例。

方法一:隐藏行和列

坦率地说,这种方法很原始,也不是很方便,但可以说两句话。 通过右键单击列或行标题并从上下文菜单中选择命令,可以隐藏工作表上任何先前选择的行或列 隐藏 (隐藏):

 

对于反向显示,选择相邻的行/列,并通过右键单击,分别从菜单中选择, 显示、 (取消隐藏).

问题是您必须单独处理每一列和每一行,这很不方便。

方法 2. 分组

如果您选择多行或多列,然后从菜单中选择 数据 – 组和结构 – 组 (数据——组和大纲——组),然后它们将被括在方括号中(分组)。 此外,组可以相互嵌套(最多允许 8 个嵌套级别):

一种更方便快捷的方法是使用键盘快捷键对预先选择的行或列进行分组。 Alt+Shift+右箭头, 并用于取消分组 Alt+Shift+向左箭头

这种隐藏不必要数据的方法要方便得多——您可以单击带有“+“或” - “,或在工作表左上角带有数字分组级别的按钮上 - 然后所需级别的所有组将立即折叠或展开。

也, 如果您的表格包含具有汇总相邻单元格功能的汇总行或列,也就是说,Excel 有机会(不是 100% 正确) 他将创建所有必要的组 用一个动作在桌子上——通过菜单 数据 - 组和结构 - 创建结构 (数据——组和大纲——创建大纲). 不幸的是,这样一个函数的工作方式非常不可预测,有时在复杂的表上完全是一派胡言。 但是你可以试试。

在 Excel 2007 及更高版本中,所有这些乐趣都在选项卡上 时间 (日期) 在小组   结构 (大纲):

方法 3. 使用宏隐藏标记的行/列

这种方法可能是最通用的。 让我们在工作表的开头添加一个空行和一个空列,并用任何图标标记我们要隐藏的行和列:

现在让我们打开 Visual Basic 编辑器 (ALT + F11),将一个新的空模块插入我们的书(菜单 插入 - 模块) 并在那里复制两个简单宏的文本:

Sub Hide() Dim cell As Range Application.ScreenUpdating = False '禁用屏幕更新以加快每个单元格在 ActiveSheet.UsedRange.Rows(1).Cells '迭代第一行中的所有单元格 If cell.Value = "x " Then cell .EntireColumn.Hidden = True '如果在单元格 x - 隐藏列 Next For Each cell In ActiveSheet.UsedRange.Columns(1).Cells '遍历第一列的所有单元格 If cell.Value = "x" Then cell.EntireRow.Hidden = True '如果在单元格 x - 隐藏行 Next Application.ScreenUpdating = True End Sub Sub Show() Columns.Hidden = False '取消所有隐藏行和列 Rows.Hidden = False End Sub  

正如你可能猜到的,宏 隐藏 隐藏和宏 展示 – 显示带标签的行和列。 如果需要,可以为宏分配热键 (Alt + F8键 和按钮 参数),或直接在工作表上创建按钮以从选项卡启动它们 开发者——插入——按钮 (开发者——插入——按钮).

方法 4. 隐藏具有给定颜色的行/列

假设在上面的示例中,相反,我们想要隐藏总计,即紫色和黑色行以及黄色和绿色列。 然后我们之前的宏必须稍微修改一下,而不是检查“x”的存在,检查填充颜色与随机选择的样本单元格的匹配:

Sub HideByColor() Dim cell As Range Application.ScreenUpdating = False 对于 ActiveSheet.UsedRange.Rows(2).Cells 中的每个单元格 如果 cell.Interior.Color = Range("F2").Interior.Color 然后 cell.EntireColumn.Hidden = True If cell.Interior.Color = Range("K2").Interior.Color Then cell.EntireColumn.Hidden = True Next For Each cell In ActiveSheet.UsedRange.Columns(2).Cells If cell.Interior.Color = Range ("D6").Interior.Color Then cell.EntireRow.Hidden = True If cell.Interior.Color = Range("B11").Interior.Color Then cell.EntireRow.Hidden = True Next Application.ScreenUpdating = True End Sub  

但是,我们不能忘记一个警告:此宏仅在源表的单元格手动填充颜色且不使用条件格式时才有效(这是 Interior.Color 属性的限制)。 因此,例如,如果您使用条件格式自动突出显示表格中数量小于 10 的所有交易:

隐藏/显示不必要的行和列

...并且您想将它们隐藏在一个动作中,则必须“完成”前一个宏。 如果您有 Excel 2010-2013,那么您可以使用而不是属性 室内情况 财产 显示格式.Interior,它输出单元格的颜色,不管它是如何设置的。 隐藏蓝线的宏可能如下所示:

Sub HideByConditionalFormattingColor() Dim cell As Range Application.ScreenUpdating = False 对于 ActiveSheet.UsedRange.Columns(1).Cells 中的每个单元格 如果 cell.DisplayFormat.Interior.Color = Range("G2").DisplayFormat.Interior.Color 然后单元格.EntireRow.Hidden = True Next Application.ScreenUpdating = True End Sub  

将单元格 G2 作为颜色比较的样本。 不幸的是该物业 DisplayFormat Excel 仅从 2010 版本开始出现,因此如果您有 Excel 2007 或更早版本,则必须想出其他方法。

  • 什么是宏,在哪里插入宏代码,如何使用它们
  • 多级列表中的自动分组

 

发表评论