ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1726|回复: 8

[已解决] 字典比较两列相同项代码求解释?谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-7 10:02 | 显示全部楼层 |阅读模式
本帖最后由 wangweihebtu 于 2018-8-7 13:46 编辑

我菜鸟,弄着数据瞎鼓捣,在比较A、B两列数据的相同项时用到了以下代码
  1. Private Sub CommandButton1_Click()
  2.   Set d = CreateObject("Scripting.Dictionary")
  3.   arr1 = Range([A2], [A65536].End(xlUp))
  4.   arr2 = Range([B2], [B65536].End(xlUp))
  5.   For i = 1 To UBound(arr1)
  6.       d(arr1(i, 1)) = 0       '本句求解释?谢谢
  7.   Next
  8.   For j = 1 To UBound(arr2)
  9.       If d.exists(arr2(j, 1)) Then d(arr2(j, 1)) = 1      '本句求解释?谢谢
  10.   Next
  11.   For Each d1 In d.keys
  12.       If d(d1) = 0 Then d.Remove (d1)
  13.   Next
  14.   Range("C2").Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys)
  15. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2018-8-7 10:26 | 显示全部楼层
d(arr1(i, 1)) = 0  这句是将字典d中的arr1中的(i,1)赋值为0

TA的精华主题

TA的得分主题

发表于 2018-8-7 10:27 | 显示全部楼层
d.exists(arr2(j, 1)) Then d(arr2(j, 1)) = 1  表示的是字典中存在arr2(j, 1)这个,就赋值1,没有就跳过
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2018-8-7 10:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2018-8-7 12:50 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-7 13:11 | 显示全部楼层
q960126 发表于 2018-8-7 10:27
d.exists(arr2(j, 1)) Then d(arr2(j, 1)) = 1  表示的是字典中存在arr2(j, 1)这个,就赋值1,没有就跳过

谢谢解答,直接意思我也明白,为啥要赋值为0,赋值为1呢?谢谢

TA的精华主题

TA的得分主题

发表于 2018-8-7 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
01.Private Sub CommandButton1_Click()

02.  Set d = CreateObject("Scripting.Dictionary")   ‘创建字典

03.  arr1 = Range([A2], [A65536].End(xlUp))       ‘将单元格区A列不含A1区域数据装入数组 ARR1
04.  arr2 = Range([B2], [B65536].End(xlUp))        ‘将单元格区B列不含B1区域数据装入数组 ARR2


05.  For i = 1 To UBound(arr1)                             'I 从1到 UBOUND(ARR1)循环

06.      d(arr1(i, 1)) = 0       '本句求解释?谢谢    'd(arr(i,1)) 给字典的关键字ARR(I,1) 对应条目赋值0

07.  Next               

08.  For j = 1 To UBound(arr2)                           ’ J从1到 UBOUND(ARR2) 循环

09.      If d.exists(arr2(j, 1)) Then d(arr2(j, 1)) = 1      '假若关键字ARR2(J,1) 不在字典内,那么,给关键字ARR2(J,1)对应的条目赋值为1

10.  Next

11.  For Each d1 In d.keys                 ‘FRO EACH 对对象集合进行循环 即对关键字集合进行循环

12.      If d(d1) = 0 Then d.Remove (d1)      ’假若关键字对应的条目为0,那么在字典中移除对应的关    键字及对应条目。

13.  Next

14.  Range("C2").Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys)
'在C2单元格向下扩展D.COUNT 行;输出字典关健字集合

15.End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-7 14:09 | 显示全部楼层
iwangyi 发表于 2018-8-7 13:39
01.Private Sub CommandButton1_Click()

02.  Set d = CreateObject("Scripting.Dictionary")   ‘创建 ...

十分感谢您的解释,我刚现学现卖解决了别人一个找不同的问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-7 14:12 | 显示全部楼层
mikezhan 发表于 2018-8-7 10:30
兄弟,这个太简单了一点吧

老兄,我刚接触这个,正在努力学习中,别的都能明白,就是不明包为啥那样赋值,现在明白了

尽管偶尔解决解决别人的问题,现学现卖,争取成长吧
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 17:09 , Processed in 0.026553 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表