ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 常见字典用法集锦及代码详解

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-28 10:59 | 显示全部楼层
本帖已被收录到知识树中,索引项:数组集合和字典
谢谢楼主分享

TA的精华主题

TA的得分主题

发表于 2018-3-28 22:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-29 08:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-29 10:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
对字典讲解的很详细,学习了

TA的精华主题

TA的得分主题

发表于 2018-3-30 22:46 | 显示全部楼层
蓝桥玄霜 发表于 2010-10-18 12:54
实例9  字典取行数,数组重新赋值
一、问题的提出:
要求编写一段代码,求得B列不重复的名字,其相应的A ...

你好,看了半天代码,图中所示的重新给数组赋值的意义在哪???有什么玄机么???

重新赋值图解

重新赋值图解

TA的精华主题

TA的得分主题

发表于 2018-3-31 20:46 | 显示全部楼层
龙鹏-Excell 发表于 2018-3-30 22:46
你好,看了半天代码,图中所示的重新给数组赋值的意义在哪???有什么玄机么???

此处 d(R(i,2))=i 应该为 d(R(i,2))=k,即字典d发现关键字存在时,1,4列相组合,5,6相加,如果这种情况出现多次,即i的值变化多次,比如i变化了3次,假设i原值为p,现为p+3,此时d(R(i,j))始终为k值不变,直到发现关键字不存在时,K值加1,并将新的K值赋值给字典,此时的R(i,j)中的变化了3次,即为R(p+3,j),这样就会出现如果下一个关键字第一次出现时,其本应为重复行合并成行后单独的下一行,然而确赋值给了下3行,也就是会出现错行赋值的情况

TA的精华主题

TA的得分主题

发表于 2018-3-31 22:35 | 显示全部楼层
气愤excel 发表于 2018-3-31 20:46
此处 d(R(i,2))=i 应该为 d(R(i,2))=k,即字典d发现关键字存在时,1,4列相组合,5,6相加,如果这种情况 ...

原数据

原数据

修改后数据

修改后数据
这个表格,我随意调换了一行重复的数据位置,为什么代码会报错呢。报类型不匹配。

TA的精华主题

TA的得分主题

发表于 2018-4-1 12:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
龙鹏-Excell 发表于 2018-3-31 22:35
这个表格,我随意调换了一行重复的数据位置,为什么代码会报错呢。报类型不匹配。

请确保d(R(i,2))=i 改为d(R(i,2))=k,如果是F8逐条语句运行时会报错,这时请将if 判断语句改为:If d.Exists(R(i, 2)) And d(R(i, 2)) <> "" Then

TA的精华主题

TA的得分主题

发表于 2018-4-1 21:56 | 显示全部楼层
抱着一丝希望求教,万一蓝桥老师看见了呢?     蓝桥老师,麻烦有空看下:http://club.excelhome.net/thread-1405535-1-1.html 。想了有一段时间了,一直无解。

TA的精华主题

TA的得分主题

发表于 2018-4-2 16:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
05050818 发表于 2018-4-1 21:56
抱着一丝希望求教,万一蓝桥老师看见了呢?     蓝桥老师,麻烦有空看下:http://club.excelhome.net/threa ...


Public Sub 杀杀杀()


Dim d As Object, i&, R, Rng()

Set d = CreateObject("scripting.dictionary")

R = Sheet1.Range("a2:a" & [a1048576].End(xlUp).Row)

ReDim Rng(1 To UBound(R), 1 To 1)

    For i = 1 To UBound(R)
   
        If Not d.exists(R(i, 1)) Then
        
            d(R(i, 1)) = ""
            
            Rng(i, 1) = 1
        
        Else
            Rng(i, 1) = 0
        
        End If
   
    Next

Sheet2.Activate

[a2:b1048576].Clear

Sheet1.Rows("1:1").Copy [a1]

[a2].Resize(UBound(R), 1) = R
[b2].Resize(UBound(R), 1) = Rng

Set d = Nothing

End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 20:20 , Processed in 0.051039 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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