
本文于2023年8月20日首发于本人同名其他平台,更多文章案例请搜索关注!
内容提要
突出显示行列
大家好,我是冷水泡茶,大家在核对检查数据的时候,特别是在对整行或整列数据进行检查的时候,有没有发生过看错位的现象?反正我是有过,比如要检查某个科目每个月的发生额有没有异常情况:

我们可以把一行或一列标上颜色,这样看得就比较清楚了,但是手工去标色,不仅费事,而且还得手工把它取消,否则这标一下,那标一下,表格看起来就可能有点让人眼花缭乱。
今天我跟大家分享一个使用VBA代码对所选单元格行、列同时标色的方法,我们一起来看看吧:
基本思路
1、选中一个单元格,把它的行、列标上特定的颜色,如果要设置字体、边框等也可以根据实际需要来操作。
2、当选中另一个单元格时,除了把当前单元格所在行、列标色外,还要取消上次标色的区域,如果设置了其他格式,也一并清除。
程序代码
1、模块1,HighLight过程,高亮显示:
Public LastRange As Range ' 用于存储上次突出显示的区域Public currCell As RangeSub HighLight() On Error Resume Next Dim dataRange As Range Dim currRange As Range Dim lastRow As Long Dim lastCol As Long '获取工作表的数据区域,这里假设数据区域从A1开始,向右和向下延伸 With ActiveSheet lastRow = .UsedRange.Rows.Count lastCol = .UsedRange.Columns.Count Set dataRange = .Range("A1").Resize(lastRow, lastCol) '检查上次是否有突出显示的区域,如果有,还原它们的格式 If Not LastRange Is Nothing Then LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示 Set LastRange = Nothing ' 清除上次突出显示的区域 End If '检查选定的单元格是否在数据区域内 If Not Intersect(currCell, dataRange) Is Nothing Then Set currRange = Union(currCell.EntireRow, currCell.EntireColumn) Set currRange = Intersect(currRange, dataRange) Else Set currRange = Union(currCell.EntireRow, currCell.EntireColumn) End If currRange.Interior.Color = RGB(245, 245, 220) Set LastRange = currRange End WithEnd Sub
代码解析:
(1)定义公共变量,lastRange,上一个高亮区域;currCell,当前单元格。
(2)设置数据区域为当前活动工作表的已使用区域。
(3)检查LastRange,如果不为空,则把它的格式清除(根据高亮的格式对应清除设置)。
(4)判断当前单元格是否在数据区域之内,如果在的话,就把当前区域设置在数据区域之内,以当前单元格为中心的十字区域;如果当前单元格不在数据区域之内,则把当前区域设置为以当前单元格为中心的十字区域(整行、整列)。
(5)对当前区域标色,可以根据需要调整设置。
(6)把当前区域赋值给LastRange,以备在选择单元格变化、工作表切换、文件关闭时,清除其格式。
2、其他过程::
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set currCell = Target.Cells(1, 1) Call HighLightEnd SubPrivate Sub Worksheet_Deactivate() If Not LastRange Is Nothing Then LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示 Set LastRange = Nothing ' 清除上次突出显示的区域 End IfEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean) If Not LastRange Is Nothing Then LastRange.Interior.ColorIndex = xlNone ' 清除上次的突出显示 Set LastRange = Nothing ' 清除上次突出显示的区域 End If ThisWorkbook.SaveEnd Sub
代码解析:
(1)Worksheet_SelectionChange工作表的选择区域变化事件,把currCell设置为目标区域的第一个单元格,避免多行多列高亮。然后调用HighLight过程。
(2)Worksheet_Deactivate,工作表变为非激活状态事件,就是激活了其他工作表,则清除上次设置的高亮格式。
(3)Workbook_BeforeClose,工作表关闭前事件,清除上次设置的高亮格式,保存工作表。
~~~~~~End~~~~~~
喜欢就点个赞、点在看、留个言呗!分享一下更给力!感谢!