收藏 分销(赏)

利用Excel内嵌的搜索技术来实现高速查找重复值.doc

上传人:pc****0 文档编号:7190379 上传时间:2024-12-27 格式:DOC 页数:3 大小:72KB 下载积分:10 金币
下载 相关 举报
利用Excel内嵌的搜索技术来实现高速查找重复值.doc_第1页
第1页 / 共3页
利用Excel内嵌的搜索技术来实现高速查找重复值.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
利用Excel内嵌的搜索技术来实现高速查找重复值 时间:2009-06-16 18:41:34来源:网络 作者:未知 点击:0次 Excel中可以实现搜索文本的功能,内嵌的优秀搜索算法可以快速的查找并定位一个特定的文本单元格,今天我使用VBA写了几行代码,实现了一个自动搜索并定位行功能的小程序!发现了Excel的这个优秀的属性,速度简直超级快!于是很快, Excel中可以实现搜索文本的功能,内嵌的优秀搜索算法可以快速的查找并定位一个特定的文本单元格,今天我使用VBA写了几行代码,实现了一个自动搜索并定位行功能的小程序!发现了Excel的这个优秀的属性,速度简直超级快!于是很快,我就有了一个新想法,升级重复值校验程序的版本到V4.0!就使用Excel的这个属性来实现!于是乎说到不如做到!开始......,下面就公布这段代码,与各位网友共同研究: '************************************************************************* '                 全局查找资产号重复数据程序v4.0 '该程序通过遍历所有工作表查找表计资产号重复数据,将重复 '数据值拷贝到另一个工作表中并标注位置信息,重复值高亮显 '示,注意:该代码必须放到ThisWorkbook中执行,首尾设断点 '************************************************************************* Public Sub FindAssetRepeat() '遍历查找资产号重复数据 Debug.Print "开始时间" & Format(Now, "yyyy年mm月dd日hh时mm分ss秒") Dim i As Long, j As Long, k As Long, l As Long, m As Long, oi As Long Dim maintemp As String, AssetColName As String Dim ws As Worksheet, obj As Object, temprow As Long oi = 1                          '标记结果工作表中初始的写入行号 AssetColName = "E"    '标识资产号所在的列的列名,如果档案的格式不同,可以修改该值 '**************************************************** '初始化重复值结果工作表开始 For i = 1 To Worksheets.Count   '先判断"重复值结果"工作表是否存在,如果存在则将句柄传给ws,并初始化     If Worksheets(i).Name = "重复值结果" Then         Set ws = Worksheets(i)         ws.Move After:=Sheets(Worksheets.Count)         ws.Cells.Select         Selection.Delete Shift:=xlUp         GoTo toBegin     End If Next i Set ws = Worksheets.Add(After:=Sheets(Worksheets.Count)) ws.Name = "重复值结果" toBegin: ws.Activate ws.Range("A" & oi & ":N" & oi).Select ws.Range("A" & oi & ":N" & oi).Merge ws.Range("A" & oi & ":N" & oi).Value = "表计资产号重复数据列表" ws.Range("O" & oi).Value = "备注" oi = oi + 1 ws.Cells.Select Selection.NumberFormatLocal = "@" ws.Cells(1, 1).Select '初始化重复值结果工作表结束 '**************************************************** '遍历所有表,开始查找重复值 For i = 1 To Worksheets.Count - 1     For j = 2 To Worksheets(i).UsedRange.Rows.Count - 1         maintemp = Trim(Worksheets(i).Range(AssetColName & j).Value)         If maintemp = "" Then GoTo toNextRow   '如果其他工作表中的被校验行的资产号是非法数据,则跳到下一条         If Asc(Left(maintemp, 1)) < 0 Or Asc(Left(maintemp, 1)) > 255 Then GoTo toNextRow   '功能同上         '************************************         '在当前工作表中查找重复值开始         Worksheets(i).Activate         Worksheets(i).Range(AssetColName & j + 1 & ":" & AssetColName & Worksheets(i).UsedRange.Rows.Count).Select toBeginSearch1:         Set obj = Selection.Find(What:=maintemp, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _                                  MatchCase:=False, MatchByte:=False, SearchFormat:=False)         If Not (obj Is Nothing) Then             obj.Activate             temprow = ActiveCell.Row             ws.Activate             ws.Range("A" & oi & ":L" & oi).Value = Worksheets(i).Range("A" & j & ":L" & j).Value             ws.Range("A" & oi + 1 & ":L" & oi + 1).Value = Worksheets(i).Range("A" & temprow & ":L" & temprow).Value             ws.Range("M" & oi).Value = Worksheets(i).Name & "表中第" & j & "行"             ws.Range("M" & oi + 1).Value = Worksheets(i).Name & "表中第" & temprow & "行"             ws.Range("N" & oi & ":N" & oi + 1).Select             ws.Range("N" & oi & ":N" & oi + 1).Merge             ws.Range("N" & oi & ":N" & oi + 1).Value = "两行数据资产号重复"             ws.Range(AssetColName & oi & ":" & AssetColName & oi + 1).Select             Selection.Interior.ColorIndex = 3             oi = oi + 3             If temprow < Worksheets(i).UsedRange.Rows.Count - 1 Then                 Worksheets(i).Activate                 Worksheets(i).Range(AssetColName & temprow + 1 & ":" & AssetColName & Worksheets(i).UsedRange.Rows.Count).Select                 GoTo toBeginSearch1             End If         End If         '在当前工作表中查找重复值结束         '**********************************************         '在其他工作表中查找重复值开始         For l = i + 1 To Worksheets.Count - 1             Worksheets(l).Activate             Worksheets(l).Range(AssetColName & ":" & AssetColName).Select toBeginSearch2:             Set obj = Selection.Find(What:=maintemp, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _                                      MatchCase:=False, MatchByte:=False, SearchFormat:=False)             If Not (obj Is Nothing) Then                 obj.Activate                 temprow = ActiveCell.Row                 ws.Activate                 ws.Range("A" & oi & ":L" & oi).Value = Worksheets(i).Range("A" & j & ":L" & j).Value                 ws.Range("A" & oi + 1 & ":L" & oi + 1).Value = Worksheets(l).Range("A" & temprow & ":L" & temprow).Value                 ws.Range("M" & oi).Value = Worksheets(i).Name & "表中第" & j & "行"                 ws.Range("M" & oi + 1).Value = Worksheets(l).Name & "表中第" & temprow & "行"                 ws.Range("N" & oi & ":N" & oi + 1).Select                 ws.Range("N" & oi & ":N" & oi + 1).Merge                 ws.Range("N" & oi & ":N" & oi + 1).Value = "两行数据资产号重复"                 ws.Range(AssetColName & oi & ":" & AssetColName & oi + 1).Select                 Selection.Interior.ColorIndex = 3                 oi = oi + 3                 If temprow < Worksheets(l).UsedRange.Rows.Count - 1 Then                     Worksheets(l).Activate                     Worksheets(l).Range(AssetColName & temprow + 1 & ":" & AssetColName & Worksheets(l).UsedRange.Rows.Count).Select                     GoTo toBeginSearch2                 End If             End If             Worksheets(l).Cells(1, 1).Select         Next l         '在其他工作表中查找重复值结束         '*********************************************** toNextRow:     Next j     Worksheets(i).Activate     Worksheets(i).Cells(1, 1).Select Next i '查找重复值结束 '******************************************************* '对查找出来的重复数据进行显示格式调整 ws.Activate If oi = 2 Then     ws.Range("A" & oi & ":N" & oi).Select     ws.Range("A" & oi & ":N" & oi).Merge     ws.Range("A" & oi & ":N" & oi).Value = "目前档案中暂未发现表计资产号重复数据"     ws.Range("O" & oi).Value = "运气不错"     ws.Range("A1:O" & oi).Select     GoTo toEnd End If ws.Range("A1:O" & oi - 2).Select toEnd: With Selection     .HorizontalAlignment = xlCenter     .VerticalAlignment = xlCenter     .Borders(xlEdgeLeft).LineStyle = xlContinuous     .Borders(xlEdgeTop).LineStyle = xlContinuous     .Borders(xlEdgeRight).LineStyle = xlContinuous     .Borders(xlEdgeBottom).LineStyle = xlContinuous     .Borders(xlInsideVertical).LineStyle = xlContinuous     .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With ws.Columns("A:O").Select ws.Columns("A:O").EntireColumn.AutoFit ws.Range("A1:N1").Select Set ws = Nothing   '释放ws句柄 Debug.Print "结束时间" & Format(Now, "yyyy年mm月dd日hh时mm分ss秒") '******************************************************* End Sub 现在我的工作中有一个任务就是校验Excel工作表中是否有重复值出现,如果出现,就提取出来!v3.0的校验时间是:19987条数据->2小时30分钟,使用v4.0后,校验时间缩短到1小时48分钟,整整比v3.0快了近42分钟! 关键字:Excel内嵌搜索技术高速查找重复值
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服