vbs比较两个数组里的数的大小_利用数组和字典,完成两个条件数据查询

01ab9563878857ee9d8b9e1680aae161.png

大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第45讲:利用数组和字典,完成两个条件下数据查询。其实对于这讲内容在前面也讲解过,本讲内容只是代码不同,但我们要多看看这些代码,对自己的思路,对于代码组织非常有用,很多时候,过程比结果更重要,我们要多多的掌握过程来实现我们的结果。

实例:如下面数据,A B 列是数据源,E2:F2是要查询的数据,将结果填在G列。

a226bdf5edb9fe601c390abfbe628486.png

我们要先想想,上述的问题实现的手段:1 可以利用代码循环比较; 2 数据库,这些都是可以的,代码我在之前文章中也讲解过,今日我们要利用字典,大家会发现代码更加简洁,简短,只要对字典理解了,那么代码也是不难的。下面看我给出的代码:

Sub mynzsz_45() '第45讲 利用数组和字典完成两个条件查询

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

代码的截图:

e72107225950e858008d54d67fba19b0.png

代码讲解:

1 上述过程实现了两个条件联合的查询。首先把源数据放到数组中,然后把待查询数据也放到数组中,同时实现在源数据中查找。

2 Set mydic = CreateObject("scripting.dictionary")

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

在上述代码中实现了创建字典,同时给出了比较的备用方案,如果需要启用不区分大小写,那么可以用此代码

3 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

上述代码将源数据放入数组后,将第一和第二的数据放到字典中作为键,将第三个数据作为对应的键值。

4 '将查询区域的数据装入数组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

上述代码将待查询数据放入数组,同时将第一和第二数据合并,在字典中找对应的键和键值,字典可以直达目的地,这一点大家要充分理解。

5 '将数组mybrr回填

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

MsgBox "OK"

'释放字典内存

Set mydic = Nothing

将用于存储查询结果的数组回填并释放内存。

下面看代码的运行:

f1cc8cf0466b305fc07baf6150b889ff.png

今日内容回向:

1 本讲内容实现两个条件查找关键是什么?

2 在数据回填时,我为什么没有用CLEAR清空一下待填区域呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值