《神奇的VBA》编程:标识重复数据

------ 需求案例------ 

日常办公场景中经常会有标识重复数据的需求,如:

标识某列中是否有重复订单号

标识某个选区中的重复值等等

本篇《神奇的VBA》编程将提供几种思路。

思路1: 利用Excel原生功能

Ms Excel软件中自带"条件格式"--> "突出显示单元格规则(H)"-->"重复值(D)"功能,该功能可以快速凸显选区内的所有重复值。

通过Excel自带的功能,很轻松地解决了需求。

思路2: 通过录制宏将Excel原生功能转化为灵活复用的宏代码

在办公自动化的应用中,我们可以借助录制宏的功能,将"条件格式"--> "突出显示单元格规则(H)"-->"重复值(D)"功能转化为宏代码(见下面代码),稍加改动就可以轻松复用。

Sub 宏1()Dim rng As RangeSet rng = Application.Intersect(Columns("D:D"), ActiveSheet.UsedRange)With rng .FormatConditions.AddUniqueValues .FormatConditions(rng.FormatConditions.Count).SetFirstPriority .FormatConditions(1).DupeUnique = xlDuplicate .FormatConditions(1).Font.Color = -16383844 .FormatConditions(1).Interior.Color = 13551615 .FormatConditions(1).StopIfTrue = FalseEnd WithSet rng = NothingEnd Sub

思路3: 利用遍历循环+字典

我们也可以利用常规的For Each遍历循环和字典("Scripting.Dictionary")功能实现同等的功能。

Sub 标识重复项1()Application.ScreenUpdating = FalseDim rng As RangeDim dic As Object
Set rng = Application.Intersect(Columns("D:D"), ActiveSheet.UsedRange)Set dic = CreateObject("Scripting.Dictionary")'遍历单元格区域,统计重复数据数量并存放进字典For Each c In rng If c <> "" Then c.Interior.Color = xlNone dic(c.Value) = dic(c.Value) + 1 End IfNext
'再次遍历单元格区域,根据字典统计数据,有重复的则变色处理For Each c In rng If dic(c.Value) > 1 Then c.Font.Color = -16383844 c.Interior.Color = 13551615 End IfNext
Set dic = NothingSet rng = NothingApplication.ScreenUpdating = TrueEnd Sub

有关遍历循环和字典功能更多详细说明请下载安装《神奇的VBA》插件学习。

在本篇案例的基础上,如果将需求再提升一个难度,比如使用颜色标识选区中的多余的重复值,怎么处理呢?

例如:重复值中,第一个重复值标识为黄色, 其它标识为红色。

本篇《神奇的VBA》将继续综合运用Excel VBA编程中常见的遍历循环和字典功能方法来实现这个需求。

Sub 标识重复项()Application.ScreenUpdating = FalseDim rng As RangeDim dic As Object
Set rng = Application.Intersect(Columns("D:D"), ActiveSheet.UsedRange)Set dic = CreateObject("Scripting.Dictionary")
'遍历单元格区域,统计重复数据数量并存放进字典For Each c In rng If c <> "" Then c.Interior.Color = xlNone dic(c.Value) = dic(c.Value) + 1 End IfNext
'再次遍历单元格区域,根据字典统计数据,有重复的则变色处理For Each c In rng If dic(c.Value) > 1 Then c.Interior.Color = vbYellow dic(c.Value) = -1 ElseIf dic(c.Value) = -1 Then c.Font.Color = -16383844 c.Interior.Color = 13551615 End IfNext
Set dic = NothingSet rng = NothingApplication.ScreenUpdating = TrueEnd Sub

注意代码中dic(c.Value) = -1对于代码后续执行有至关重要的作用。用来标识该重复值是否已经经过处理了。

今天的分享就到这里,本篇中介绍的思路抛砖引玉,如果您有更多更好的思路欢迎分享!

(0)

相关推荐

  • 问与答102:如何按顺序将图片插入到工作表单元格中?

    excelperfect Q:我想将一些图片按顺序插入到工作表单元格中,例如从工作表当前单元格开始,向左每行插入3张图片,然后转到下一行再插入3张图片.如下图1所示,当前单元格为B2,当我选择了想要插 ...

  • 《神奇的VBA》编程:快速定位报表列

    ------ 本篇前言------  对于经常使用VBA编程来处理日常报表数据的职场朋友们,经常会需要根据报表的列名来定位绝对列号,便于后续对该列中的所有单元格进行遍历判断分析等操作.对于VBA初学者 ...

  • 《神奇的VBA》编程:批量设置指定列格式

    ------ 本篇前言------  日常办公中,经常需要使用VBA编程来批量为报表中某些列设置格式,比如水平/垂直对齐,设置字体颜色, 背景色, 字体名称,字号,显示或者隐藏. 这点需求在我本人开发 ...

  • 《神奇的VBA》编程:监控表格单元格值的变化

    该插件充当数据库和Excel界面的连接器实现同步功能以减少工作中对SAP的依赖,为了减少不必要的数据库更新,寻思着用户在操作Excel中数据时监控单元格值,如有变化即用户切切实实地修改了数据再上传同步 ...

  • 如何利用VBA删除重复数据行

    <VBA代码解决方案>这套教程是我最早推出的教程,目前已经是第二版修订了.这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的"积木编程"思想.要 ...

  • Excel神公式:区分大小写统计不重复数据个数

    点击下方 ↓ 关注,每天免费看Excel专业教程 置顶公众号或设为星标 ↑ 才能每天及时收到推送 个人微信号 | (ID:LiRuiExcel520) 微信服务号 | 跟李锐学Excel(ID:LiR ...

  • Excel VBA编程中有哪些常用的英文词汇儿

    --HI,大家好,我是星光,总有朋友问学习VBA和英语好坏有关系吗? 这问题让俺怎么回答呢,说没关系也有关系,说有关系其实也没多大关系-- VBA只是一个非常初级的编程语言,甚至在很多人眼里算不上编程 ...

  • 教学管理菜鸟成长记85-如何提取不重复数据?

    关键词:EXCEL2016:高级筛选:数据透视表:INDEX+MATCH函数:提取不重复数据:操作难度** 这天,教务处王处长给小菜打开电话:"小菜,五分钟之内把上学期补考不及格人数,课程门 ...

  • 菜鸟记277-统计工作表中非重复数据,送您三种方法够不够用?

    万一您身边的盆友正好需要呢? 关键词:EXCEL2016:数据透视表:非重复统计:操作难度*** 管理工作过程中很大一部分工作就是需要统计,比如小菜接到一个任务,要对本学期各系部教学任务分配情况进行统 ...

  • 多条件统计不重复数据个数,万金油还能包打天下吗?

    送人玫瑰,手有余香,请将文章分享给更多朋友 动手操作是熟练掌握EXCEL的最快捷途径! 万金油经典函数组合是我们在实际工作中经常会用到的函数组合.在一对多及多对多查询.提取不重复清单的时候它发挥着巨大 ...