当工作表里面的数据量大的时候,鼠标选定当前单元格后,要想弄清楚它对应的行和列实在是不方便。如果能做到excel自动以高亮突出颜色的方式来显示当前行和列的话,那该多方便啊,哈哈。其实excel中可以做到这个效果的,方法有两种:条件格式和vba。
使用条件格式
下面将使用条件格式实现当前单元格和当前单元所在行或列突出显示的效果。
在公式中使用了cell函数,并将screenupdation属性的值设置为true以实现屏幕更新。
在thisworkbook模块中输入如下代码: private sub workbook_sheetselectionchange(byval sh as object, byval target as range) application.screenupdating = true end sub 当然,如果只想在工作表中实现突出显示的效果,将application.screenupdating = true代码输入到worksheet_selectionchange事件中。
接下来,在excel中选择菜单“格式——条件格式”命令,弹出“条件格式”对话框。
在“条件”下拉框中选择“公式”并在右侧中输入下面相应的公式,然后点击“格式”按钮,设置相应的格式,完成后,按“确定”按钮。
下面是相应的公式及其作用: (1)公式“=cell("address")=address(row(),column())”,突出活动单元格,如下图1所示。
图1
(2)公式“=cell("row")=row()”,突出单元格所在行,如下图2所示。
图2
(3)下面的公式突出到当前单元格为止的相应行和列,呈反l形,如下图3所示。 “=or(and(cell("row")=row(),cell("col")+1>column()),and(cell("col")=column(),cell("row")+1>row()))”
图3
(4)在“条件格式”对话框中对所选单元格区域设置两个如下所列的公式条件,将呈反l形突出显示到当前单元格为止的相应行和列,且当前单元格背景色改变、字体加粗显示,如下图4所示。 “=cell("address")=address(row(),column())” “=or(and(cell("row")=row(),cell("col")+1>column()),and(cell("col")=column(),cell("row")+1>row()))”
图4 示例文档见 使用条件格式自动突出显示.xls。
使用vba代码
(1) 突出显示至当前单元格所在的行和列,呈反l形。在需要设置此功能的工作表模块中输入下面的代码:
private sub worksheet_selectionchange(byval target as range)
dim icolor as integer
'注:如果工作表中有想要保留的条件格式,则不要使用本程序
'忽略用户选择单元格区域时可能产生的错误
on error resume next
icolor = target.interior.colorindex
if icolor < 0 then
icolor = 36
else
icolor = icolor + 1
end if
'避免字体颜色与突出色相同
if icolor = target.font.colorindex then icolor = icolor + 1
cells.formatconditions.delete
'水平突出色
with range("a" & target.row, target.address)
.formatconditions.add type:=2, formula1:="true"
.formatconditions(1).interior.colorindex = icolor
end with
'垂直突出色
with range(target.offset(1 - target.row, 0).address & ":" & _
target.offset(-1, 0).address)
.formatconditions.add type:=2, formula1:="true"
.formatconditions(1).interior.colorindex = icolor
end with
end sub
注意,此代码运行后,将清除所在工作表中含有的条件格式。示例文档见 用颜色自动突出显示当前单元格行列1.xls。uploadfiles/2006-10/1027319888.rar
(2) 突出显示当前单元格所在的行和列。在需要设置此功能的工作表模块中输入下面的代码:
private sub worksheet_selectionchange(byval target as range)
'可带条件格式,但不能复制/剪切/粘贴操作
with target.parent
.cells.interior.colorindex = 0
.columns(target.column).cells.interior.colorindex = 35
.rows(target.row).cells.interior.colorindex = 35
end with
end sub
注意,此代码运行后,在当前工作表中不能进行复制、剪切和粘贴功能。示例文档见 用颜色自动突出显示当前单元格行列2.xls。uploadfiles/2006-10/1027121529.rar
(3) 突出显示当前单元格所在的行和列。在需要设置此功能的工作表模块中输入下面的代码:
private sub worksheet_change(byval target as range)
if application.cutcopymode <> false then
application.cutcopymode = false
call colorband(target)
end if
end sub
‘- - - - - - - - - - - - - - - - - - - - -
private sub worksheet_selectionchange(byval target as range)
if application.cutcopymode = false then
call colorband(target)
else
exit sub
end if
end sub
‘- - - - - - - - - - - - - - - - - - - - -