Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: ldy

[分享] 学习 字典(DICTIONARY) 讨论答疑帖

[复制链接]
发表于 2007-10-7 11:19 | 显示全部楼层

这段时间在刮字典风。

回复

使用道具 举报

 楼主| 发表于 2007-10-7 11:56 | 显示全部楼层

QUOTE:
以下是引用杨副官在2007-10-7 11:34:09的发言:


Debug.Print Join(d.Keys, vbCrLf); vbCrLf; "d.Count=" & d.Count  这一句是什么意思?print不是打印吗?

 

相当于 msgbox 的功能

http://www.excelpx.com/forum.php?mod=viewthread&tid=27869&replyID

这里面的附件中的代码注释里有说明

[此贴子已经被作者于2007-10-7 12:17:15编辑过]
回复

使用道具 举报

发表于 2007-10-7 17:20 | 显示全部楼层

ldy老师:

全国地区代码.XLS中

For i = 1 To UBound(arr) '遍历
        d.Add arr(i, 1), arr(i, 2) '地名查邮编
        d.Add arr(i, 2), arr(i, 1) '邮编查地名
       
        If arr(i, 2) Like "##0000" Then d("all") = d("all") & "," & arr(i, 1) '省级
       
        If Mid(arr(i, 2), 3) > "0000" Then '省级以下
            If Right(arr(i, 2), 2) = "00" Then '地市级
                Mid(arr(i, 2), 3, 4) = "0000"
                d(d(arr(i, 2))) = d(d(arr(i, 2))) & "," & arr(i, 1) '嵌套字典对象,反查
            Else
                Mid(arr(i, 2), 5, 2) = "00" '县区级
                d(d(arr(i, 2))) = d(d(arr(i, 2))) & "," & arr(i, 1)
            End If
        End If
    Next

真是搞的我晕头转向

另外:

[a2:a40].Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Mid(d("all"), 2) '省份名称

这句也不太能理解

 

[em04][em04]
[此贴子已经被作者于2007-10-7 17:23:31编辑过]
回复

使用道具 举报

发表于 2007-10-7 17:25 | 显示全部楼层

001 偶写的那个"查询" 该怎么用上字典[em23]
回复

使用道具 举报

发表于 2007-10-7 18:06 | 显示全部楼层


就这个问题 指教一下

回复

使用道具 举报

 楼主| 发表于 2007-10-7 18:50 | 显示全部楼层

001 头晕的地方 应该是这个了。下表反映了 字典的前21行数据

              keys                                                          items

all,北京市,天津市,河北省,山西省,内蒙古自治区,辽宁省,吉林省,黑龙江省,上海市,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,广西壮族自治区,海南省,重庆市,四川省,贵州省,云南省,西藏自治区,陕西省,甘肃省,青海省,宁夏回族自治区,新疆维吾尔自治区,台湾省,香港特别行政区,澳门特别行政区
北京市110000,北京市市辖区,北京市县
110000北京市
北京市市辖区110100,北京市东城区,北京市西城区,北京市崇文区,北京市宣武区,北京市朝阳区,北京市丰台区,北京市石景山区,北京市海淀区,北京市门头沟区,北京市燕山区,北京市房山区,北京市通州区,北京市顺义区,北京市昌平区,北京市大兴区,北京市怀柔区,北京市平谷区
110100北京市市辖区
北京市东城区110101
110101北京市东城区
北京市西城区110102
110102北京市西城区
北京市崇文区110103
110103北京市崇文区
北京市宣武区110104
110104北京市宣武区
北京市朝阳区110105
110105北京市朝阳区
北京市丰台区110106
110106北京市丰台区
北京市石景山区110107
110107北京市石景山区
北京市海淀区110108
110108北京市海淀区

这样便于在Worksheet_Change事件中调用

[此贴子已经被作者于2007-10-7 18:53:47编辑过]
回复

使用道具 举报

发表于 2007-10-7 18:50 | 显示全部楼层

啊 把arr rra 放到了循环外 真的快了N倍

希谢谢001 ldy [em23][em23]

[此贴子已经被作者于2007-10-7 18:51:27编辑过]
回复

使用道具 举报

发表于 2007-10-7 21:01 | 显示全部楼层

    字典这个功能其实真的在当一个字典在用,只不过这个字典是我们自已来编写的,可以很方便的根据索引值进行查找,还可以继续添加、删除和修改原来的"字义"。

回复

使用道具 举报

 楼主| 发表于 2007-10-12 16:44 | 显示全部楼层

to 001

http://www.excelpx.com/forum.php?mod=viewthread&tid=27967&replyID=&skin 

这个问题 和上帖中的 问题3 一样

  引用对象和代码创建对象的差异

我这样理解,用代码创建对象 VBE编辑器 没有取得 对象的所有属性 和方法。

解决方法 就是再定义一个字典对象,这样可读性强一些,

人好理解,VBE编辑器估计也就好理解了[em01]

不知道其他对象是不是也有 类似问题

Sub kk()
   
    Dim d As New Dictionary
   
    Set d("王先生") = New Dictionary
    d("王先生")("TEL") = "010-87654321"
    d("王先生")("MOB") = "13988888888"
    d("王先生")("TQQ") = "45678900"
    d("王先生")("父") = "王老四"
    d("王先生")("子") = "王小明"
   
    Dim dd As New Dictionary
    Set dd = d("王先生")

    For i = 1 To dd.Count
         Cells(i, 1) = dd.Keys(i - 1)
        Cells(i, 2) = dd(dd.Keys(i - 1))
    Next i

End Sub

定义 数据类型 是很好的习惯,很多人(包括我)都没有这个习惯

看来以后要留意了 要想使用对象的所有属性和方法 最好就是 把对象实例化(NEW)

dim xx as new xxxxxx  或

dim xx as xxxxxx

set xx = new xxxxxx

 

 

回复

使用道具 举报

 楼主| 发表于 2007-10-9 23:48 | 显示全部楼层

 d(Cells(8, 1))  不等于  d("张三")

 Cells(i, 3) = d(Cells(i, 1).value)(Cells(i, 2).value) 这样就对了

字典中的key 不仅可以是 数字 字符 还可以是 其他对象(数组除外)

 Cells(i, 1) 和 Cells(i, 1).value 是不同的 一个是 range 一个是 string

需要注意的是 d(1) 和  d("1")  也是不同的  不管哪种比较方式

[此贴子已经被作者于2007-10-9 23:50:21编辑过]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-23 03:39 , Processed in 0.161545 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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