热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

isexists可以传数组查询吗_多条件查询的VBA应用方案

大家好,今日推出常用“积木”过程案例分享第314期,今日内容是利用字典实现三条件,结果唯一查询。这些资料是提供给大家我多年经验的记录&#x
46c780ac636bc61f05daf8d8da9fa8f7.png

大家好,今日推出常用“积木”过程案例分享第314期,今日内容是利用字典实现三条件,结果唯一查询。这些资料是提供给大家我多年经验的记录,来源于我多年的实践。大家在学习VBA的时候,可以把这些代码块作为一块块的积木对待,平时积累,用时拿来修正、组合。这就是我的“积木编程”的思想,这些讲解就是我推出的“积木”方案,希望大家加以利用。最近代码多是出自我的第三套教程”VBA数组与字典解决方案”。

cf2dfc638929f9451650a90d7e44e397.png

=========================== ① =========================

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

上述代码实现三层嵌套下的数据查询。

c5226fdda42dce69b7a3d79b462756dd.png
fe7ab5dd2451ce6296a11827265473e1.png

各套教程的介绍:

第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

分享成果,随喜正能量



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • 深入理解Redis中的字典实现
    本文详细介绍了Redis中字典的实现机制,包括其底层数据结构、哈希表与哈希节点的关系、元素添加方法及rehash操作的具体流程。 ... [详细]
  • 本题主要考察二维数组的遍历和重塑。通过将二维数组降为一维,再根据新的行数和列数重新构建矩阵。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文详细介绍了在编写jQuery插件时需要注意的关键要点,包括模块化支持、命名规范和性能优化等内容,旨在帮助开发者提高插件的质量和可维护性。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Python应用实例大揭秘:七大令人惊叹的高阶技巧展示
    2020年,Python无疑成为了最炙手可热的编程语言,其影响力已远远超出程序员的范畴。从初学者到资深从业者,甚至小学生,都在纷纷加入Python的学习热潮中。凭借其低门槛、易上手和强大的功能,Python正逐渐成为各行业不可或缺的工具。本文将揭示七个令人惊叹的Python高级应用技巧,帮助读者进一步提升编程水平。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
author-avatar
烦恼的天伦之乐_456
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有