坐标选择

你有一个大显示器,但你使用的桌子更大。 而且,在屏幕上寻找必要的信息时,总是有机会“滑”到下一行并看向错误的方向。 我什至认识一些人,在这种情况下,他们总是在他们身边放一把木尺,以将其连接到显示器上的线路上。 未来的技术! 

如果活动单元格在工作表上移动时突出显示当前行和列? 一种像这样的坐标选择:

比尺子好,对吧?

有几种不同复杂度的方法来实现这一点。 每种方法都有其优点和缺点。 让我们详细看看它们。

方法1.显而易见。 突出显示当前行和列的宏

解决“额头”问题的最明显方法——我们需要一个宏来跟踪工作表上选择的变化,并为当前单元格选择整行和整列。 还希望能够在必要时启用和禁用此功能,以便这样的十字形选择不会阻止我们输入例如公式,而仅在我们查看列表以搜索必要的内容时才起作用信息。 这将我们带到需要添加到工作表模块的三个宏(选择、启用和禁用)。

打开一个包含要在其中获得此类坐标选择的表格的工作表。 右键单击工作表选项卡并从上下文菜单中选择命令 来源文字 (源代码)。Visual Basic 编辑器窗口应打开。 将这三个宏的文本复制到其中:

Dim Coord_Selection As Boolean '用于选择开/关的全局变量 Sub Selection_On() '宏选择 Coord_Selection = True End Sub Selection_Off() '宏关选择 Coord_Selection = False End Sub '执行选择的主程序 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim WorkRange As Range If Target.Cells.Count > 1 Then Exit Sub '如果选择了超过 1 个单元格,则退出 If Coord_Selection = False Then Exit Sub '如果选择关闭,则退出 Application.ScreenUpdating = False Set WorkRange = Range ("A6:N300") '选择可见的工作范围的地址  

将工作范围的地址更改为您自己的地址——我们的选择将在此范围内起作用。 然后关闭 Visual Basic 编辑器并返回 Excel。

按键盘快捷键 ALT + F8打开一个包含可用宏列表的窗口。 宏 选择_开启,正如您可能猜到的那样,包括当前工作表上的坐标选择,以及宏 选择_关闭 – 将其关闭。 在同一窗口中,通过单击按钮 参数 (选项) 您可以为这些宏分配键盘快捷键以便于启动。

这种方法的优点:

  • 相对容易实施
  • 选择 - 该操作是无害的,不会以任何方式更改工作表单元格的内容或格式,一切都保持原样

这种方法的缺点:

  • 如果工作表上有合并的单元格,则此类选择无法正常工作 - 并集中包含的所有行和列都被立即选中
  • 如果您不小心按了 Delete 键,那么不仅活动单元格会被清除,而且整个选定区域都会被清除,即从整个行和列中删除数据

方法 2. 原创。 CELL + 条件格式化功能

这种方法虽然有一些缺点,但在我看来非常优雅。 要仅使用内置的 Excel 工具来实现某些东西,在 VBA 中进行编程的最低限度是特技飞行😉

该方法基于使用 CELL 函数,它可以提供给定单元格的许多不同信息——高度、宽度、行列数、数字格式等。这个函数有两个参数:

  • 参数的代码字,例如“列”或“行”
  • 我们要确定此参数值的单元格的地址

诀窍是第二个参数是可选的。 如果未指定,则采用当前活动单元格。

此方法的第二个组成部分是条件格式。 这个非常有用的 Excel 功能允许您在满足指定条件时自动设置单元格格式。 如果我们将这两个想法合二为一,我们会得到以下算法,通过条件格式化来实现我们的坐标选择:

  1. 我们选择我们的表格,即将来应该在其中显示坐标选择的那些单元格。
  2. 在 Excel 2003 及更早版本中,打开菜单 格式——条件格式——公式 (格式——条件格式——公式). 在 Excel 2007 及更高版本中 - 单击选项卡 主页 (首页)按键 条件格式 - 创建规则 (条件格式 - 创建规则) 并选择规则类型 使用公式来确定要格式化的单元格 (使用公式)
  3. 输入我们的坐标选择公式:

    =OR(CELL(“行”)=ROW(A2),CELL(“列”)=COLUMN(A2))

    =OR(单元格(«行»)=行(A1),单元格(«列»)=列(A1))

    此公式检查表格中每个单元格的列号是否与当前单元格的列号相同。 列也是如此。 因此,只有那些列号或行号与当前单元格匹配的单元格才会被填充。这就是我们想要实现的十字形坐标选择。

  4. 点击按钮 骨架 (格式) 并设置填充颜色。

一切都准备好了,但有一个细微差别。 事实上,Excel 不会将选择的更改视为工作表上数据的更改。 因此,仅当活动单元格的位置发生变化时,它才不会触发公式的重新计算和条件格式的重新着色。 因此,让我们向工作表模块添加一个简单的宏来执行此操作。 右键单击工作表选项卡并从上下文菜单中选择命令 来源文字 (源代码)。Visual Basic 编辑器窗口应打开。 将此简单宏的文本复制到其中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveCell.Calculate End Sub  

现在,当选择发生变化时,将启动使用函数重新计算公式的过程 CELL 在条件格式中并淹没当前行和列。

这种方法的优点:

  • 条件格式不会破坏自定义表格格式
  • 此选择选项适用于合并的单元格。
  • 不存在意外点击删除整行和整列数据的风险 删除.
  • 最少使用宏

这种方法的缺点:

  • 条件格式的公式必须手动输入。
  • 没有快速的方法来启用/禁用此类格式 - 在删除规则之前始终启用它。

方法 3. 最佳。 条件格式 + 宏

中庸之道。 我们使用方法 1 中的宏跟踪工作表上的选择的机制,并使用方法 2 中的条件格式为其添加安全突出显示。

打开一个包含要在其中获得此类坐标选择的表格的工作表。 右键单击工作表选项卡并从上下文菜单中选择命令 来源文字 (源代码)。Visual Basic 编辑器窗口应打开。 将这三个宏的文本复制到其中:

Dim Coord_Selection As Boolean Sub Selection_On() Coord_Selection = True End Sub Sub Selection_Off() Coord_Selection = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim WorkRange As Range, CrossRange As Range Set WorkRange = Range("A7:N300") 'адрес рабочего диапазона с таблицей If Target.Count > 1 Then Exit Sub If Coord_Selection = False Then WorkRange.FormatConditions.Delete Exit Sub End If Application.ScreenUpdating = False If Not Intersect(Target, WorkRange) 什么都没有然后设置 CrossRange = Intersect( WorkRange, Union(Target.EntireRow, Target.EntireColumn)) WorkRange.FormatConditions.Delete CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:="=1" CrossRange.FormatConditions(1).Interior.ColorIndex = 33 Target.FormatConditions .Delete End If End Sub  

不要忘记将工作范围地址更改为您的表格地址。 关闭 Visual Basic 编辑器并返回 Excel。 要使用添加的宏,请按键盘快捷键 ALT + F8  并以与方法1相同的方式进行。 

方法4。美丽。 FollowCellPointer 插件

来自荷兰的 Excel MVP Jan Karel Pieterse 在他的网站上赠送了一个免费插件 跟随单元指针(36Kb),它通过使用宏绘制图形箭头线来突出显示当前行和列来解决相同的问题:

 

很好的解决方案。 在某些地方并非没有故障,但绝对值得一试。 下载存档,将其解压缩到磁盘并安装附加组件:

  • 在 Excel 2003 及更早版本中 – 通过菜单 服务 – 附加组件 – 概览 (工具——加载项——浏览)
  • 在 Excel 2007 及更高版本中,通过 文件 - 选项 - 附加组件 - 前往 - 浏览 (文件——Excel选项——加载项——转到——浏览)

  • 什么是宏,在 Visual Basic 中插入宏代码的位置

 

发表评论