动态改变单元格背景色,高亮显示选定单元格所在的行和列

发布时间:2024-12-08 10:15

如何在Excel中快速筛选数据:选中要筛选的列,点击数据菜单,选择筛选,符合条件的单元格会被高亮显示。 #生活知识# #生活经验# #软件#

目录 功能概要实现步骤条件格式的公式说明

HighLightTheRowAndColOfSelectedCells
不知你有没有这样的困扰:“在行列数很多的表格中查看数据时,希望可以高亮显示选定单元格所在的行列呢?“ 话不多说,直接上效果图。
先前在网上也参考了很多实现方式,个人觉得这个实现方法是比较符合我的需求的。下面就实现细节,进行说明。
注:此方法也是网络上参考来的,并非原创,出处已经记不得了。如有侵犯版权,请联系删除。

功能概要

可以指定高亮显示的范围;如上图,高亮显示范围为 $B$3:$L$26。选定单元格可以为1个单元格或多个连续单元格;即使选定单元格在 $B$3:$L$26 范围之外,也可正常动作;高亮显示的行和列随着选定单元格的变化而动态改变;

这些功能均可在上面的 GIF 动图中看出。

实现步骤

格式为 *.xlsm,且存有数据的Excel表格,用于保存VBA代码;
Table01条件格式 =OR(AND(ROW()>=sRow,ROW()<=eRow),AND(COLUMN()>=sColumn,COLUMN()<=eColumn));
ConditionFormat01
ConditionFormat02VBA代码(因为博客编辑器不支持VBA语法,所以一下代码的关键字和注释不能高亮显示)

' 捕捉选定单元格发生变化的事件 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If ActiveSheet.Range("A1").Value = 1 Then ' 当A1单元格的值为1时,向工作表添加 名称。 ActiveWorkbook.Names.Add Name:="sRow", RefersToR1C1:=Target.Row ' 以 R1C1 格式,将选定单元格的首行号赋予 名称sRow ActiveWorkbook.Names.Add Name:="eRow", RefersToR1C1:=Selection.Cells(Selection.Cells.Count).Row ' 以 R1C1 格式,将选定单元格的末行号赋予 名称eRow ActiveWorkbook.Names.Add Name:="sColumn", RefersToR1C1:=Target.Column ' 以 R1C1 格式,将选定单元格的首列号赋予 名称sColumn ActiveWorkbook.Names.Add Name:="eColumn", RefersToR1C1:=Selection.Cells(Selection.Cells.Count).Column ' 以 R1C1 格式,将选定单元格的末列号赋予 名称eColumn Else ' 当A1单元格的值为非1时,从工作表中删除 名称。 On Error Resume Next ActiveWorkbook.Names("sRow").Delete ActiveWorkbook.Names("eRow").Delete ActiveWorkbook.Names("sColumn").Delete ActiveWorkbook.Names("eColumn").Delete End If End Sub

1234567891011121314151617

VBA capture

条件格式的公式说明

=OR(AND(ROW()>=sRow,ROW()<=eRow),AND(COLUMN()>=sColumn,COLUMN()<=eColumn))

公式中的名称 sRow, eRow, sColumn, eColumn 的意思
在上面的VBA代码的注释中已经简单说明过,但是,可能光看注释可能还是不明白,因此下面我们结合图片来进行详细说明。

首先我们任意选定 B3:L26 区域中单元格。因为VBA代码只有在选定单元格发生变化时才会被执行,所以此时VBA代码已经被执行过了。如下图所示,我们可以看到名称管理器中上述的名称已经被自动添加,且名称的值也赋好了。
Name01
由此图可看出,我们选定的单元格区域为 D4:E5,
选定区域的首行号为 4,所以 sRow = 4;
选定区域的末行号为 5,所以 eRow = 5;
选定区域的首列(D)号为 4,所以 sColumn = 4;
选定区域的末列(E)号为 5,所以 eColumn = 5;

接着,我们改变选定区域:
Name02
由此图可看出,我们选定的单元格区域为 B10,
选定区域的首行号为 10,所以 sRow = 10;
选定区域的末行号为 10,所以 eRow = 10;
选定区域的首列(B)号为 2,所以 sColumn = 2;
选定区域的末列(B)号为 2,所以 eColumn = 2;

至此,sRow, eRow, sColumn, eColumn 的意思已经理清楚了。

公式中 ROW(),COLUMN() 的意思
ROW() 返回所参照的行的行号;
COLUMN() 返回所参照的列的列号;

到此,我们可以回过头来,重新解读条件格式中的公式。

=OR(AND(ROW()>=sRow,ROW()<=eRow),AND(COLUMN()>=sColumn,COLUMN()<=eColumn))
等价可以看作
=OR(A,B)

其中
A= AND(ROW()>=sRow,ROW()<=eRow)
B= AND(COLUMN()>=sColumn,COLUMN()<=eColumn)

A 意为 B3:L26 区域中,满足 sRow <= 行号 <= eRow 条件的行;
B 意为 B3:L26 区域中,满足 sColumn <= 列号 <= eColumn 条件的列;

因此,整个公式的意思为:
在 B3:L26 区域中,只要满足 sRow <= 行号 <= eRow 条件的行,或者满足 sColumn <= 列号 <= eColumn 条件的列,其背景色将会被涂成条件格式中指定颜色。

以上。

网址:动态改变单元格背景色,高亮显示选定单元格所在的行和列 https://www.yuejiaxmz.com/news/view/411580

上一篇: GeoPandas库
下一篇: @Builder(toBuild

相关内容

如何在EXCEL输入公式“=1+2+3”后,单元格内显示为=1? 爱问知识人
excel表格的单元格公式如何进行批量修改?如将公式=Shee 爱问知识人
保护眼睛,改变电脑窗口颜色和Pdf背景颜色
第三单元《生物圈中的绿色植物》单元作业设计2023
手绘卧室背景墙风格 手绘背景墙注意事项
【装修风格】现代简约风格特点一览 现代简约装修风格设计元素
背景墙质量鉴定
现代轻奢风丨时光更迭,朝暮其质,品味多元化格调生活场景
第三单元 生物圈中的绿色植物(1—2章)教案(表格式)2023
装修新时尚手绘背景墙 如何DIY手绘背景墙 价格多少

随便看看