VBA:Excel选中单元格后,相同值高亮显示
场景
在Excel数据核对中,要检查同样的数据在表格里是否重复出现,可以利用重复值筛选的方式,但是重复值筛选这个相对来说是比较静态的,如果想要动态地显示重复值,就可以借助VBA里的SelectionChange 函数,动态高亮显示重复值。
代码释义
首先是完整的函数代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Dim rng As Range
If Target.Count = 1 And Target <> "" Then
Cells.Interior.ColorIndex = -4142
For Each rng In UsedRange
If rng = Target.Value Then
rng.Interior.ColorIndex = 44
End If
Next
End If
End Sub
接着来看每一条代码的具体含义:
1.首先函数定义
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
...
End Sub
Byval 的意思是 定义的形式参数“ 按值传递”,若为Byref,则是形式参数“按地址传递”
2.定义触发函数的条件
If Target.Count > 1 Then Exit Sub
...
End Sub
这句意思是当选中的单元格超过1个,就是退出这个函数,即Exit Sub
3.定义执行参数
Dim rng As Range
Dim用于变量声明。定义rng为一个Range,Range可表示一个单元格、一行、一列或者包含一个或多个连续单元格块的选择
4.定义条件
If Target.Count = 1 And Target <> "" Then
当选中的单元格为1个,且(AND代表条件“与”)选中单元格值不为空(“<>”表示不等于),执行下列语句
Cells.Interior.ColorIndex = -4142
Interior是对象的内部属性,“.”类似于C++中的访问,这句的意思是赋予选中的单元格的ColoerIndex属性值-4142
那**-4142**是什么呢?
这里要做一个展开。
这张图中的右边的特殊数字是在一定场景中代表左边的属性的。比如上面代码中的“-4142”,在此处代表的是xlNone,意思是没有,xl就是excel,none就是无。
所以这句代码的意思就是选中这个单元格颜色属性为无。
5.编写循环体
循环部分的代码是
For Each rng In UsedRange
If rng = Target.Value Then
rng.Interior.ColorIndex = 3
End If
Next
UsedRange属性是工作表的属性,它指的是工作表中已经使用过、编辑过的单元格区域。
所以第一句的意思是定义的rng是循环的变量,每次循环后增加1,使用过、编辑过的单元格区域遍历循环。
下面两句就是,如果循环到当前单元格,与目标单元格的内容一致,就将当前的单元格的颜色参数置为44,即橙色。
If rng = Target.Value Then
rng.Interior.ColorIndex = 44
然后就是,有If 就要有 End If,我自己把它理解成C++的结束花括号。
Next就代表下次循环执行,再跳到For语句处
扩展一下,Excel常用颜色代码
Excel中实际执行效果
在开发工具中打开Visual Basic
在下拉框中选中worksheet 以及SelectionChange函数。
然后把代码贴进去,CV大法。然后最后重要的是要保存 Ctrl+S。
然后就可以用了。执行效果就像下面这个动图:
以上。