Excel精英培训网

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

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

[复制链接]
 楼主| 发表于 2007-10-9 23:56 | 显示全部楼层

如果编程中 遇到不可思议的地方 察看一下本地窗口 或用 typename 函数 测试一下

例如:

debug.print typename(cells(1,1))  ,typename(cells(1,1).value)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2007-10-9 22:41 | 显示全部楼层

ldy老师:

在学习了您以下的代码后

Set d("王先生") = New Dictionary
d("王先生")("TEL") = "010-87654321"
d("王先生")("MOB") = "13988888888"
d("王先生")("QQ") = "45678900"
d("王先生")("父") = "王老四"
d("王先生")("子") = "王小明"
'要查他的手机
MsgBox d("王先生")("MOB")

我试着编了一小段,但达不到要求

Sub test()
   
    Dim d As New Dictionary
    arr = [A1].CurrentRegion
   
    For i = 2 To UBound(arr)
        Set d(arr(i, 1)) = New Dictionary
        For j = 2 To UBound(arr, 2)
            d(arr(i, 1))(arr(1, j)) = arr(i, j)
        Next j
    Next i
   
    For i = 8 To [A65536].End(xlUp).Row
        Cells(i, 3) = d(Cells(i, 1))(Cells(i, 2))
    Next i
      
End Sub

红色的这一句取不到子字典的关键字(日期)所对应的数量?

可以取到吗?该如何取?


 

回复

使用道具 举报

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

谢谢ldy老师

哈哈,正是因为这个“垃圾桶”什么都能装,所以对“垃圾”要求分类!

我明白啦!

献花[em23][em23][em23][em23][em23][em23]

回复

使用道具 举报

发表于 2007-10-12 15:18 | 显示全部楼层

或者增加

arr1 = d("王先生").Keys
arr2 = d("王先生").Items

再将arr1、arr2写入单元格也成。

想来可能是字典内的字典不能用key(i)的形式引用第i项的key吧,就象用CreateObject("scripting.dictionary")形式创建的一样???

另还有个问题请教ldy老师:字典中已有许多条目,如果只想将所有条目的item清除而保留key,用什么办法最好?目前我用的是循环让每项=""。

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

使用道具 举报

发表于 2007-10-11 21:07 | 显示全部楼层

昨天运行兰版的示例文件时正常,今天换台机子就出现如下错误,不知什么原因:

回复

使用道具 举报

发表于 2007-10-11 21:42 | 显示全部楼层

ldy老师,我又来了[em04]

我想问的是:

Sub kk()

Dim d As New Dictionary
   
    d("TEL") = "010-87654321"
    d("MOB") = "13988888888"
    d("TQQ") = "45678900"
    d("父") = "王老四"
    d("子") = "王小明"
   
     For i = 1 To d.Count
        Cells(i, 1) = d.Keys(i - 1)
        Cells(i, 2) = d(d.Keys(i - 1))
    Next i

End Sub

这一段我们可以依次得到字典的关键字和条目

而:

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

    For i = 1 To d("王先生").Count
        Cells(i, 1) = d("王先生").Keys(i - 1)
        Cells(i, 2) = d("王先生")(d("王先生").Keys(i - 1))
    Next i

End Sub

这一段却不能得到子字典的关键字和条目,出现报错:

有办法得到吗?

原本是想用字典,子字典形成类似堆栈一样,以解决http://www.excelpx.com/forum.php?mod=viewthread&tid=28282这个问题的。[em04]

回复

使用道具 举报

发表于 2007-10-12 15:11 | 显示全部楼层

For i = 1 To d("王先生").Count
        Cells(i, 1) = d("王先生").Keys(i - 1)
        Cells(i, 2) = d("王先生")(d("王先生").Keys(i - 1))
    Next i

改成

Cells(1, 1).Resize(d("王先生").Count, 1) = Application.Transpose(d("王先生").Keys)
Cells(1, 2).Resize(d("王先生").Count, 1) = Application.Transpose(d("王先生").Items)

可以达到目的。可是不知道为什么[em06]

真希望ldy老师能给我们讲讲字典内含字典、含数组等等的用法!!!

回复

使用道具 举报

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

to djyjysxxs

如果只想将所有条目的item清除而保留key ,循环是最好的方法

回复

使用道具 举报

发表于 2007-10-13 09:57 | 显示全部楼层

谢谢ldy的解惑

也谢谢您的解决方法!

我这就去试试!

回复

使用道具 举报

发表于 2007-10-20 13:40 | 显示全部楼层

怎样将前面两个表格中的值作为key 啊

2 key  df  dfdfdf  ddd

2 key  djii gg     gfgfg

然后生成结果

2 key  df  dfdfdf  ddd  djii gg     gfgfg

 

表述不清楚,没看明白什么意思 

                                                            ———————ldy

 

[此贴子已经被ldy于2007-10-21 1:45:01编辑过]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 13:42 , Processed in 0.255977 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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