Excel精英培训网

 找回密码
 注册
12
返回列表 发新帖
楼主: wcymiss

[习题] 【字典201201班】A组(A01—A22)第2讲作业上交贴

  [复制链接]
发表于 2012-6-10 13:14 | 显示全部楼层
本帖最后由 周义坤 于 2012-6-10 13:16 编辑
  1. Sub ek_sky()
  2. Dim arr, arr1, arr2, arr3
  3. Dim i&, j&, l&, m&
  4. Dim k As New Dictionary
  5. Application.ScreenUpdating = False
  6. arr = Range("A2:d" & Cells(Rows.Count, 1).End(3).Row)
  7. arr1 = Range("E2:F6")
  8. For i = 1 To UBound(arr1)
  9. For j = 1 To UBound(arr)
  10. If arr1(i, 1) = arr(j, 2) Then
  11. arr(j, 4) = arr1(i, 2)
  12. End If
  13. Next j
  14. Next i
  15. ReDim Preserve arr(1 To UBound(arr), 1 To 4)
  16. For l = 1 To UBound(arr)
  17. k(Format(arr(l, 1), "m月") & "|" & arr(l, 2)) = k(Format(arr(l, 1), "m月") & "|" & arr(l, 2)) + arr(l, 3) * arr(l, 4)
  18. Next l
  19. arr2 = k.Keys
  20. ReDim arr3(1 To k.Count, 1 To 2)
  21. For m = 0 To UBound(arr2)
  22. arr3(m + 1, 1) = Split(arr2(m), "|")(0)
  23. arr3(m + 1, 2) = Split(arr2(m), "|")(1)
  24. Next m
  25. Application.ScreenUpdating = True
  26. Range("H2:J10000").ClearContents
  27. Range("H2").Resize(k.Count, 2) = arr3
  28. Range("J2").Resize(k.Count, 1) = Application.Transpose(k.Items)
  29. End Sub
复制代码

点评

借用辅助D列的思想不错。值得鼓励  发表于 2012-6-12 13:31
1.代码未缩进;2.ARR动态扩展出错,不用动态  发表于 2012-6-12 13:30

评分

参与人数 1 +6 收起 理由
liuguansky + 6 神马都是浮云

查看全部评分

回复

使用道具 举报

发表于 2012-6-10 15:47 | 显示全部楼层


A22:无聊的疯子

作业:
第2讲-A22-无聊的疯子.zip (98.94 KB, 下载次数: 14)

点评

ITEM中装入数组,不过第一二个元素没有变化,一直在重复装入。思维不错。  发表于 2012-6-12 13:34

评分

参与人数 1 +9 收起 理由
liuguansky + 9

查看全部评分

回复

使用道具 举报

发表于 2012-6-10 20:10 | 显示全部楼层
  1. Option Explicit
  2. Sub aa()    '作业代码写在该模块
  3.     Dim d As New Dictionary, d1 As New Dictionary, arr, i, j
  4.     arr = Range("e1").CurrentRegion
  5.     For i = 2 To UBound(arr)
  6.         d1(arr(i, 1)) = arr(i, 2)
  7.     Next
  8.     arr = Range("a1").CurrentRegion
  9.     For i = 2 To UBound(arr)
  10.         d(Month(arr(i, 1)) & "月" & "|" & arr(i, 2)) = d1(arr(i, 2)) * arr(i, 3) + d(Month(arr(i, 1)) & "月" & "|" & arr(i, 2))
  11.     Next
  12.     ReDim arr(0 To d.Count - j, 1 To 3)
  13.     For i = 0 To d.Count - 1
  14.         arr(i, 1) = Split(d.Keys(i), "|")(0)
  15.         arr(i, 2) = Split(d.Keys(i), "|")(1)
  16.         arr(i, 3) = d.Items(i)
  17.     Next
  18.     Range("h2").Resize(d.Count, 3) = arr
  19.     Set d = Nothing: Set d1 = Nothing
  20. End Sub
复制代码

评分

参与人数 1 +10 收起 理由
liuguansky + 10 洗衣王子,你是来打酱油的吧。

查看全部评分

回复

使用道具 举报

发表于 2012-6-10 21:57 | 显示全部楼层
第2讲-A13-w2001pf
sub aa()    '作业代码写在该模块
Dim d As New Dictionary
    Dim i As Long, x As Long, t As Long
    Dim arr
    Dim arr2
    arr2 = Range("e2:f6")
    For i = 2 To 111
        d(Month(Cells(i, 1)) & "月" & "|" & Cells(i, 2)) = d(Month(Cells(i, 1)) & "月" & "|" & Cells(i, 2)) + Cells(i, 3)
    Next i
    ReDim arr(d.Count - 1, 1 To 3)
    For x = 0 To d.Count - 1
        arr(x, 1) = Split(d.Keys(x), "|")(0)
        arr(x, 2) = Split(d.Keys(x), "|")(1)
            For t = 1 To 5
                If arr(x, 2) = arr2(t, 1) Then
                    arr(x, 3) = d.Items(x) * arr2(t, 2)
                End If
            Next t
    Next x
    Range("h2").Resize(d.Count, 3) = arr
End Sub

评分

参与人数 1 +9 收起 理由
liuguansky + 9

查看全部评分

回复

使用道具 举报

发表于 2012-6-10 22:54 | 显示全部楼层
第2讲-A01-xdwy81129.rar (32.14 KB, 下载次数: 1)

点评

代码未缩进,先合并为KEY,再分列,并设置了数字格式。  发表于 2012-6-12 13:36

评分

参与人数 1 +10 收起 理由
liuguansky + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-6-11 18:59 | 显示全部楼层
第二讲-A19-zhongnansha2011.rar (32.04 KB, 下载次数: 6)

点评

组合KEY再SPLIT。重复引用计算表达示有定义变量的习惯  发表于 2012-6-12 13:38

评分

参与人数 1 +10 收起 理由
liuguansky + 10

查看全部评分

回复

使用道具 举报

发表于 2012-6-12 12:45 | 显示全部楼层
谢谢吴姐。

201201字典班-第2课-A18-思密达0.rar

31.46 KB, 下载次数: 11

评分

参与人数 1 +10 收起 理由
liuguansky + 10

查看全部评分

回复

使用道具 举报

发表于 2012-6-12 14:50 | 显示全部楼层
Sub aa()    '作业代码写在该模块
    Dim d As New Dictionary
    Dim d2 As New Dictionary
    Dim arr, arr2, i As Integer
    arr = Range("a2:c111")
    Range("h2:J111") = ""
    For i = 2 To 6
        d.Add Cells(i, "E").Value, Cells(i, "f")
    Next
    For i = 1 To UBound(arr)
        d2(Month(arr(i, 1)) & "|" & arr(i, 2)) = d2(Month(arr(i, 1)) & "|" & arr(i, 2)) + arr(i, 3) * d(arr(i, 2))
    Next
    ReDim arr2(d2.Count - 1, 1 To 3)
    For i = 0 To d2.Count - 1
        arr2(i, 1) = Split(d2.Keys(i), "|")(0) & "月"
        arr2(i, 2) = Split(d2.Keys(i), "|")(1)
        arr2(i, 3) = d2.Items(i)
    Next
    Range("h2").Resize(d2.Count - 1, 3) = arr2
End Sub


评分

参与人数 1 +8 收起 理由
wcymiss + 8 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-6-12 18:40 | 显示全部楼层
参考代码:[前期绑定]
Sub aa()   
    Dim D As New Dictionary, Ar1, Ar2, Syf$, Ske$
    Dim Arr(1 To 60000, 1 To 3), i&, K&
    Ar1 = [a1].CurrentRegion.Value
    Ar2 = [e1].CurrentRegion.Value
    For i = 2 To UBound(Ar2)
      D.Add Ar2(i, 1), Ar2(i, 2)
    Next i
    For i = 2 To UBound(Ar1)
        Syf = Format(Ar1(i, 1), "mÔÂ")
        Ske = Syf & Ar1(i, 2)
        If D.Exists(Ar1(i, 2)) Then
            If D.Exists(Ske) Then
                Arr(D(Ske), 3) = Arr(D(Ske), 3) + Ar1(i, 3) * D(Ar1(i, 2))
            Else
                K = K + 1: D.Add Ske, K
                Arr(K, 1) = Syf: Arr(K, 2) = Ar1(i, 2): Arr(K, 3) = Ar1(i, 3) * D(Ar1(i, 2))
            End If
        End If
    Next i
    Range("h2:j" & Rows.Count).ClearContents
    [h2].Resize(K, 3) = Arr
    set  d=nothing
End Sub

作业中的问题:
1.引用工作表函数;
2.单元格操作;
3.含计算或引用对象的表达式,没有养成赋值给变量的习惯;
4.关于D.KEYS/ITEMS方法生成的数组,前期绑定可直接引用数组中的元素,后期绑定不可直接引用;如果要引用KEYS/ITEMS方法生成的数组中的元素,建议是用变量赋值后,再引用;[不要怕定义变量]
5.代码缩进;
6.赋值前清空结果区域;
7.获取ITEM时,尽量判断KEY是否存在;[若有新建需要,可采用简写方式];
8.返回D.KEYS/ITEMS方法时,建议是判断D.COUNT>0,再进行后续的处理;
9.字典使用完,释放内存。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 11:43 , Processed in 0.600330 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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