Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3007|回复: 3

[已解决]字典解释?

[复制链接]
发表于 2015-1-31 19:38 | 显示全部楼层 |阅读模式
本帖最后由 afad12 于 2015-1-31 23:36 编辑

Sub abc()
    Dim d, d1, Arr, s$, x$, i&, j&, k, t, k1, t1, kk, tt
    Sheet1.Activate
    Set d = CreateObject("Scripting.Dictionary")
    Set d1 = CreateObject("Scripting.Dictionary")
    Arr = Range("f6", [m65536].End(3)).Value
    For i = 1 To UBound(Arr)
        If Arr(i, 8) <> "" Then
        If Right(Arr(i, 1), 1) = "x" Then
            x = "(" & Arr(i, 2) & "-" & Arr(i, 3) & "-" & Arr(i, 4) & ")": y = Arr(i, 8)
            If d.exists(x) = False Then Set d(x) = CreateObject("Scripting.Dictionary")
            d(x)(y) = d(x)(y) + 1
        ElseIf Right(Arr(i, 1), 1) = "y" Then
            x = "(" & Arr(i, 2) & "-" & Arr(i, 3) & "-" & Arr(i, 4) & ")": y = Arr(i, 8)
            If d1.exists(x) = False Then Set d1(x) = CreateObject("Scripting.Dictionary")
            d1(x)(y) = d1(x)(y) + 1
        End If
        End If
    Next
    k = d.keys: t = d.items
    k1 = d1.keys: t1 = d1.items
    s = "x:"
    For i = 0 To UBound(k)
        s = s & t(i).Count & "个" & k(i)
        kk = t(i).keys: tt = t(i).items
        If t(i).Count = 1 Then
            s = s & kk(0) & ";": js1 = js1 + 2
        Else
            s = s & ":"
            For j = 0 To UBound(kk)
                s = s & tt(j) & "个" & kk(j)
                If j <> UBound(kk) Then s = s & "," Else s = s & ";"
            Next
            js1 = js1 + t(i).Count * 2
         End If
    Next
    s = s & vbCrLf & "y:"
    For i = 0 To UBound(k1)
        s = s & t1(i).Count & "个" & k1(i)
        kk = t1(i).keys: tt = t1(i).items
        If t1(i).Count = 1 Then
            s = s & kk(0) & ";": js2 = js2 + 2
        Else
            s = s & ":"
            For j = 0 To UBound(kk)
                s = s & tt(j) & "个" & kk(j)
                If j <> UBound(kk) Then s = s & "," Else s = s & ";"
            Next
            js2 = js2 + t1(i).Count * 2
        End If
    Next
   Sheet2.Activate
   [b14] = s
   [b20] = "计数1=" & js1 & vbCrLf & "计数2=" & js2
End Sub

k = d.keys: t = d.items
kk = t(i).keys: tt = t(i).items
k是关键字,t是项目,kk是字典项目的关键字,tt是字典项目的项目,怎么看不懂?

最佳答案
2015-1-31 22:33
  1. Sub dmeo()
  2.     Dim dyh$
  3.     dyh = Chr(34)   '输出单引号用
  4.     Dim d As Object, da As Object, db As Object
  5.    
  6.     Set d = CreateObject("Scripting.Dictionary")
  7.     Set d("a") = CreateObject("Scripting.Dictionary")
  8.     d("a")("a1") = 1
  9.     d("a")("a2") = 2
  10.     d("a")("a3") = 3
  11.     Set d("b") = CreateObject("Scripting.Dictionary")
  12.     d("b")("b1") = 11
  13.     d("b")("b2") = 22
  14.     d("b")("b3") = 33
  15.     Set da = d("a")
  16.     Set db = d("b")
  17.     Stop
  18.     Debug.Print "a1:" & da("a1")
  19.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  20.     da("a1") = da("a1") + 1
  21.     Debug.Print "a1:" & da("a1")
  22.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  23.     d("a")("a1") = d("a")("a1") + 1
  24.     Debug.Print "a1:" & da("a1")
  25.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  26. End Sub
复制代码
写了个简单的演示,STOP后你看看本地窗口
发表于 2015-1-31 21:57 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2015-1-31 22:27 | 显示全部楼层
hwc2ycy 发表于 2015-1-31 21:57
这里是字典嵌套

能详细解释这代码,项目有关键字,项目有项目?
回复

使用道具 举报

发表于 2015-1-31 22:33 | 显示全部楼层    本楼为最佳答案   
  1. Sub dmeo()
  2.     Dim dyh$
  3.     dyh = Chr(34)   '输出单引号用
  4.     Dim d As Object, da As Object, db As Object
  5.    
  6.     Set d = CreateObject("Scripting.Dictionary")
  7.     Set d("a") = CreateObject("Scripting.Dictionary")
  8.     d("a")("a1") = 1
  9.     d("a")("a2") = 2
  10.     d("a")("a3") = 3
  11.     Set d("b") = CreateObject("Scripting.Dictionary")
  12.     d("b")("b1") = 11
  13.     d("b")("b2") = 22
  14.     d("b")("b3") = 33
  15.     Set da = d("a")
  16.     Set db = d("b")
  17.     Stop
  18.     Debug.Print "a1:" & da("a1")
  19.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  20.     da("a1") = da("a1") + 1
  21.     Debug.Print "a1:" & da("a1")
  22.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  23.     d("a")("a1") = d("a")("a1") + 1
  24.     Debug.Print "a1:" & da("a1")
  25.     Debug.Print "d(" & dyh & "a" & dyh & ")(" & dyh & "a1" & dyh & "):" & d("a")("a1")
  26. End Sub
复制代码
写了个简单的演示,STOP后你看看本地窗口
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:21 , Processed in 0.255543 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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