利用VBA字典,提取给出条件的数据

2023-06-30 浏览次数 78

莫以小善而不为,莫以恶小而为之。心善则美,心纯则真。怀善心,做善事,一生无愧。怀平常心,做平常事,日夜安宁。把浮躁的心静下来,去感悟真实的时间,静下心,常存感恩之心,做善事,一生无愧。怀平常心,做平常事,日夜安宁。人之欲望不止,一山还比一山高,岂能如愿?看淡纷争,看轻得失,心安即是归处。一杯茶,满也好,少也好,不要计较其间;浓也好,淡也好,其中自有值得品的味道。逆境时多学习,积累的就是福报,多学习,积累的就是财富。保持快乐的心态,坚定且执着。去学习有用的知识,经营自己,而不是天天混日子,也不是天天熬日子。静下心,为后疫情时代做知识的储备。后疫情时代将会是一个全新的世界。在今后更加严峻的存量残杀世界中,为自己的生存进行知识的储备,特别是新知识的储备。为后疫情时代做的必要准备。

什么是存量残杀?简单而言,在取代OFFICE新的办公软件没有到来之前,谁能把应用做到最为先进,谁就是王者。其中登峰至极的技能非VBA莫属!

今日继续和大家分享VBA编程中常用的常用"积木"过程代码。这些内容大多是我的经验的记录,来源于我多年的经验。最近代码多是出自"VBA数组与字典解决方案"教程,有一些朋友反映分享的内容不能很好的理解,可以参考这套资料的内容进行研读。今日分享的是第275期。

VBA过程代码275:利用数组和字典完成两个条件查询

Sub MyNZ ()

Sheets("45").Select

Set mydic = CreateObject("scripting.dictionary")

'd.CompareMode = vbTextCompare '不区分字母大小写,此语句备用

'将数据明细,装入数组myarr

myarr = Sheets("45").[a1].CurrentRegion

'遍历数组myarr,将数据装入字典,注意此处的S是合并条件作为字典的key值,字典的键值

For i = 2 To UBound(myarr)

For j = 2 To UBound(myarr, 2)

s = myarr(i, 1) & "@" & myarr(i, j)

mydic(s) = myarr(i, 3)

Next

Next

'将查询区域的数据装入数组brr

mybrr = Sheets("45").[e1].CurrentRegion

'合并查询的两个条件成为一个条件字符串

For i = 2 To UBound(mybrr)

s = mybrr(i, 1) & "@" & mybrr(i, 2)

For j = 3 To UBound(mybrr, 2)

If mydic.exists(s) Then

mybrr(i, j) = mydic(s) '从字典中取s对应的条目

Else

mybrr(i, j) = "NO FIND" '否则返回假空

End If

Next

Next

'将数组mybrr回填

Sheets("45").[e1].CurrentRegion = mybrr

MsgBox "OK"

'释放字典内存

Set mydic = Nothing

End Sub

代码讲解:上述过程实现了两个条件联合的查询。首先把源数据放到数组中,然后把待查询数据也放到数组中,同时实现在源数据中查找。遍历数组myarr,将数据装入字典,注意此处的S是合并条件作为字典的key值,字典的键值。代码将源数据放入数组后,将第一和第二的数据放到字典中作为键,将第三个数据作为对应的键值。将查询区域的数据装入数组brr

最后将数组mybrr回填并释放字典内存。

VBA是利用Office实现自己小型办公自动化的有效手段.我根据自己20多年的VBA实际利用经验,现在推出了四部VBA学习教程,也是我"积木编程"思想的具体体现。

第一:VBA代码解决方案,是VBA中各个知识点的讲解,这部教程可以覆盖绝大多数的知识点;

第二:VBA数据库解决方案,是数据处理的专业利器,详细的介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作。

第三:VBA数组与字典解决方案,讲解VBA中的数组和字典的利用。字典是VBA代码水平提高的手段,值得深入的学习。

第四:VBA代码解决方案之视频,是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。

上述教程的学习顺序,1,3,2或者是4,3,2逐渐深入的了解VBA掌握VBA.目前正在集中精力写第五部教程:VBA中类的解读和利用,希望在年内能陆续在各个平台和大家见面。

利用VBA进行数据统计真的非常实用,希望大家掌握这个工具,利用这个工具,让自己轻松,高效,快乐的工作。我的"积木编程"思想也是值得大家借鉴的,这种思想让大家在代码中解脱出来,成模块的构建自己的应用,提高自己的编程效率。根据我提供的经验,利用时间多学习。