ExcelVBA——字典实用技巧

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ExcelVBA——字典实⽤技巧
最近写了⼀些⼩功能,对字典有了进⼀步的理解,太强⼤了!
个⼈最近⽤过的字典应⽤有这么⼏个,写下来防⽌⾃⼰忘~同时⽅便⼤家
⼀、查找重复⾏
【原理】利⽤字典的exist⽅法,将数据加⼊字典时判断⼀下,如果已经存在,就说明当前数据为重复数据,应该删除
【⽰例代码】
Sub chongfu() '查重
Dim i As Long
Dim endline As Long'定义⼯作表长度变量
endline = Sheet3.Range("A30000").End(xlUp).Row '获取⼯作表Sheet3有数据的最后⼀⾏⾏号
Set d = CreateObject("scripting.dictionary") '设定字典d
For i = endline To2Step -1'从最后⼀⾏开始,依次把各个字段拼接到⼀起(注意,这⾥我的需求是这⼏个字段拼在⼀起的字符串不允许重复,因此我先拼接再判重)'把所有字符串拼接到数组⾥
If Sheet3.Cells(i, 2) <> ""Then'判断该⾏是否为空
If IsError(Sheet3.Cells(i, 2)) = False Then'如果关键单元格不是#N/A,则进⼊字典设置
x = Sheet3.Cells(i, 2) '******************设置赋给字典的变量,即需要去重的单元格!*******************
If Not d.Exists(x) Then'判断是否重复
d(x) = x '如果不重复,则把x定为item
Else
Sheet3.Rows(i & ":" & i).Delete Shift:=xlUp '如果字典中已有对应的item,则该⾏重复,删除重复的⾏
End If
End If
End If
Next
End Sub
【效果展⽰】
⼆、查找关键字
【原理】最常见的应⽤,根据key来查找对应的item
【⽰例代码】
Sub DicFind() '查找编号对应的数据
endline = Sheet3.Range("E100000").End(xlUp).Row '获取待匹配的数据区域长度
Set d = CreateObject("Scripting.Dictionary") '设置字典d
Arr = Sheet3.Range("A2:B26975") '获得字典数据
For i = 1To UBound(Arr) '设置sheet3 A列为字典关键字key,B列为字典关键字对应的值(item)
If Arr(i, 1) <> ""Then'当A列不为空时,将item装⼊数组
x = Arr(i, 1) '想以哪⼀列为关键字查找结果,就把x设置成哪⼀列的单元格
d(x) = Arr(i, 2)
Else
Exit For'A列为空时,退出for循环
End If
Next
Brr = Sheet3.Range("$E$2:$F$" & endline) '将待查找的数据放⼊数组
For j = 1To UBound(Brr)
x = Brr(j, 1) '将E列的编号设为key
If d.Exists(x) Then'如果字典中有对应的item,则将item写⼊数组brr
Brr(j, 2) = d(x) '把查找到的item写⼊brr,这⾥对应F列
End If
Next
Sheet3.Range("$E$2:$F$" & endline) = Brr '将匹配好的数据写回单元格
End Sub
【效果展⽰】
建设中。

之后想起来就更新~
写了⼀半,发现早就有完善的教程了(汗)
作者是ExcelHome 的ExcelVBA程序开发区的版主蓝桥⽞霜,特此注明。

相关文档
最新文档