大家好,今日推出常用“积木”过程案例分享第314期,今日内容是利用字典实现三条件,结果唯一查询。这些资料是提供给大家我多年经验的记录,来源于我多年的实践。大家在学习VBA的时候,可以把这些代码块作为一块块的积木对待,平时积累,用时拿来修正、组合。这就是我的“积木编程”的思想,这些讲解就是我推出的“积木”方案,希望大家加以利用。最近代码多是出自我的第三套教程”VBA数组与字典解决方案”。
=========================== ① =========================
Sub mynzsz_83()
Sheets("83").Select
myarr = Range("a2:f" & Range("a2").End(xlDown).Row)
Set mydic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(myarr)
If Not mydic.exists(myarr(i, 1)) Then
Set mydic(myarr(i, 1)) = CreateObject("Scripting.Dictionary")
End If
If Not mydic(myarr(i, 1)).exists(myarr(i, 2)) Then
Set mydic(myarr(i, 1))(myarr(i, 2)) = CreateObject("Scripting.Dictionary")
End If
mydic(myarr(i, 1))(myarr(i, 2))(myarr(i, 3)) = myarr(i, 4)
Next
Set myRng = Range(Cells(2, "I"), Cells(Range("I2").End(xlDown).Row, "I"))
For Each uu In myRng
Cells(uu.Row, "L") = ""
If mydic.exists(uu.Value) Then
If mydic(uu.Value).exists(Cells(uu.Row, "J").Value) Then
Cells(uu.Row, "L") = mydic(uu.Value)(Cells(uu.Row, "J").Value)(Cells(uu.Row, "K").Value)
End If
End If
Next
Set mydic = Nothing
MsgBox ("ok")
End Sub
=========================②========================
代码讲解:
1) 上面的代码实现了字典的三级嵌套来完成赋值和查询的过程:
Set mydic = CreateObject("Scripting.Dictionary");这是字典的最外层结构
Set mydic(myarr(i, 1)) = CreateObject("Scripting.Dictionary");将第一层字典的键值作为字典;
Set mydic(myarr(i, 1))(myarr(i, 2)) = CreateObject("Scripting.Dictionary"):将第二层字典的键值作为字典,实现字典的嵌套。
赋值:mydic(myarr(i, 1))(myarr(i, 2))(myarr(i, 3)) = myarr(i, 4)
2) '将数据存入数组
myarr = Range("a2:f" & Range("a2").End(xlDown).Row)
上述代码实现了数据数组装载,。
3) For i = 1 To UBound(myarr)
'这里利用了字典的嵌套
If Not mydic.exists(myarr(i, 1)) Then
Set mydic(myarr(i, 1)) = CreateObject("Scripting.Dictionary")
End If
If Not mydic(myarr(i, 1)).exists(myarr(i, 2)) Then
Set mydic(myarr(i, 1))(myarr(i, 2)) = CreateObject("Scripting.Dictionary")
End If
'mydic的键值是字典,这时字典的键值是一个一维数组
mydic(myarr(i, 1))(myarr(i, 2))(myarr(i, 3)) = myarr(i, 4)
Next
上述语句完成了字典的嵌套和赋值,注意在实现嵌套的时候要分层逐步实现,最后才是把数组数据赋给字典。
4) If mydic.exists(uu.Value) Then
If mydic(uu.Value).exists(Cells(uu.Row, "J").Value) Then
Cells(uu.Row, "L") = mydic(uu.Value)(Cells(uu.Row, "J").Value)(Cells(uu.Row, "K").Value)
End If
End If
Next
上述代码实现三层嵌套下的数据查询。
各套教程的介绍:
第1套:VBA代码解决方案
第2套:VBA数据库解决方案
第3套:VBA数组与字典解决方案
第4套:VBA代码解决方案之视频
第5套:VBA中类的解读和利用
第6套:VBA信息获取与处理
上述教程的学习顺序:1→3→2→6→5或者4→3→2→6→5。如需要可以WeChat: NZ9668或者VBA6337
分享成果,随喜正能量