ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 27599|回复: 58

[分享]自动为当前单元格所在行和列加上颜色

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-10-27 13:29 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Range对象
自动为当前单元格所在行和列加上颜色
分类:ExcelVBA>>Web资源(vbaexpress)>>技术技巧
当光标定位在工作表中某单元格中时,Excel自动为该单元格或者该单元格所在的行或列加上颜色,这个技巧可用于在工作表中突出显示当前单元格及其所在的行和列,以强调数据,并方便阅读。下面介绍了实现此功能的几种方法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项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事件中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
接下来,在Excel中选择菜单“格式——条件格式”命令,弹出“条件格式”对话框。在“条件”下拉框中选择“公式”并在右侧中输入下面相应的公式,然后点击“格式”按钮,设置相应的格式,完成后,按“确定”按钮。
下面是相应的公式及其作用:
(1)公式“=CELL("address")=ADDRESS(ROW(),COLUMN())”,突出活动单元格,如下图1所示。
  图1
[此贴子已经被作者于2006-10-27 13:42:13编辑过]

[分享]自动为当前单元格所在行和列加上颜色

[分享]自动为当前单元格所在行和列加上颜色

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:32 | 显示全部楼层
(2)公式“=CELL("row")=ROW()”,突出单元格所在行,如下图2所示。
  图2
[此贴子已经被作者于2006-10-27 13:42:40编辑过]

[分享]自动为当前单元格所在行和列加上颜色

[分享]自动为当前单元格所在行和列加上颜色

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:33 | 显示全部楼层
(3)下面的公式突出到当前单元格为止的相应行和列,呈反L形,如下图3所示。
=OR(AND(CELL("row")=ROW(),CELL("col")+1>COLUMN()),AND(CELL("col")=COLUMN(),CELL("row")+1>ROW()))
  图3
[此贴子已经被作者于2006-10-27 13:43:06编辑过]

[分享]自动为当前单元格所在行和列加上颜色

[分享]自动为当前单元格所在行和列加上颜色

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:35 | 显示全部楼层
(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()))
EnGR5owf.rar (8.3 KB, 下载次数: 272)

[分享]自动为当前单元格所在行和列加上颜色

[分享]自动为当前单元格所在行和列加上颜色

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:36 | 显示全部楼层
使用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。 NwwmdrnL.rar (7.46 KB, 下载次数: 216)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:37 | 显示全部楼层
(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。 lqWfomvA.rar (5.93 KB, 下载次数: 189)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:39 | 显示全部楼层
(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
‘- - - - - - - - - - - - - - - - - - - - -
Private Sub ColorBand(ByVal rngTarget As Range)
  With rngTarget.Parent
    .Cells.Interior.ColorIndex = 0
    .Columns(rngTarget.Column).Cells.Interior.ColorIndex = 35
    .Rows(rngTarget.Row).Cells.Interior.ColorIndex = 35
  End With
End Sub
此代码不会影响复制、剪切和粘贴功能。示例文档见 用颜色自动突出显示当前单元格行列3.xls。 gGztgiT9.rar (6.72 KB, 下载次数: 318)

BLP8x0Gt.rar

4.59 KB, 下载次数: 196

[求助]为什么标号无法从1开始(急)

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-27 13:40 | 显示全部楼层

(4) 在工作表中有一个复选框,用来决定是否突出显示当前单元格所在的行和列。即当您选中该复选框后,将突出显示当前单元格所在的行和列。在需要设置此功能的工作表模块中输入下面的代码:
Private Sub CheckBox1_Change()
  If Me.CheckBox1.Value = False Then
    Me.Cells.Interior.ColorIndex = 0
  End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - -
Private Sub Worksheet_Change(ByVal target As Range)
  If Me.CheckBox1.Value = True Then
    If Application.CutCopyMode <> False Then
      Application.CutCopyMode = False
      Call ColorBand(target)
    End If
  End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - -
Private Sub Worksheet_SelectionChange(ByVal target As Range)
  If Me.CheckBox1.Value = True Then
    If Application.CutCopyMode = False Then
      Call ColorBand(target)
    Else
      Exit Sub
    End If
  End If
End Sub
‘- - - - - - - - - - - - - - - - - - - - -
Private Sub ColorBand(ByVal rngTarget As Range)
  With rngTarget.Parent
    .Cells.Interior.ColorIndex = 0
    .Columns(rngTarget.Column).Cells.Interior.ColorIndex = 35
    .Rows(rngTarget.Row).Cells.Interior.ColorIndex = 35
  End With
End Sub
示例文档见 用颜色自动突出显示当前单元格行列4.xls。 ERpO59Oy.rar (8.83 KB, 下载次数: 302)

By fanjy in 2006-10-27

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 04:15 , Processed in 0.051572 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表