Excel精英培训网

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

[已解决]用纯粹的字典与数组解决仅仅分类的问题

[复制链接]
发表于 2012-1-30 20:54 | 显示全部楼层 |阅读模式
  1. Sub 字典与数组替代筛选()
  2.      Dim DIC As New Dictionary, RAG As Range, X, Y, XX
  3.          For Each RAG In Range("B5:B" & Range("B65536").End(3).Row)
  4.               DIC(RAG.Value) = ""
  5.               Next
  6.          Dim ARR, ARR1(1 To 10000)
  7.          ARR = Range("A5:AB" & Range("AB65536").End(3).Row)
  8.          On Error Resume Next
  9.             For X = 1 To DIC.Count
  10.                For Y = 1 To UBound(ARR)
  11.                    If DIC.Keys(X) = ARR(Y, 2) Then
  12.                       XX = XX + 1
  13.                       ARR1(XX) = ARR(Y, 2)
  14.                     End If
  15.                 Next
  16.             Next
  17.                   
  18.                
  19.            Stop
  20.   End Sub
复制代码
不想用工作表的筛选,也是想好好的学一下字典与数组,如图所示,派工单按发生的顺序先后录入,我想做的是,相同的人名都排在一起,也就是根据人名重新分类,但无需汇总,我发个我做的代码,但完成不下去了........
     我先说说我的思路:
        1.先根据工作表的B列,生成字典的不重复的人名KEYS
        2.再把工作表装入一个数组 ARR
        3.循环...循环...判断字典的KEYS 是否和数组的第二列(也就是人名列)的某个值相等,如果相等的话,那么就把数组的整列都 放入一个新数组ARR1
       4.生成的新的ARR1 应该是和原来的ARR 维数与上下标完全一至的,最后覆盖整个工作表,即完成整个工作表的分类。
          我的代码仅仅对人名列一列进行分类就进行不下去了,{:4112:}
最佳答案
2012-1-30 21:06
  1. Sub aa()
  2.     Dim arr, i As Long, j As Long, n As Long
  3.     Dim arr1, arr2, Ro As Long, Co As Long
  4.     Dim d As New Dictionary
  5.     Dim d1 As New Dictionary
  6.     arr = Range("A2:D9")
  7.     For i = 1 To UBound(arr)
  8.         n = d.Count
  9.         If d.Exists(arr(i, 2)) Then
  10.             d(arr(i, 2)) = Array(d(arr(i, 2))(0), d(arr(i, 2))(1) + 1)
  11.         Else
  12.             d.Add arr(i, 2), Array(n + 1, 1)
  13.         End If
  14.     Next i
  15.     ReDim arr1(1 To UBound(arr), 1 To UBound(arr, 2))
  16.     arr2 = d.Items
  17.     For i = 1 To UBound(arr)
  18.         d1(arr(i, 2)) = d1(arr(i, 2)) + 1
  19.         For j = 1 To d(arr(i, 2))(0)
  20.             If j = 1 Then
  21.                 Ro = 0
  22.             Else
  23.                 Ro = Ro + arr2(j - 2)(1)
  24.             End If
  25.         Next j
  26.         Ro = Ro + d1(arr(i, 2))
  27.         For Co = 1 To 4
  28.             arr1(Ro, Co) = arr(i, Co)
  29.         Next Co
  30.     Next i
  31.     Range("F2").Resize(UBound(arr1), UBound(arr1, 2)) = arr1
  32. End Sub
复制代码
模拟附件.rar (10.08 KB, 下载次数: 37)
我的问题.png
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-1-30 21:03 | 显示全部楼层
回复

使用道具 举报

发表于 2012-1-30 21:06 | 显示全部楼层    本楼为最佳答案   
  1. Sub aa()
  2.     Dim arr, i As Long, j As Long, n As Long
  3.     Dim arr1, arr2, Ro As Long, Co As Long
  4.     Dim d As New Dictionary
  5.     Dim d1 As New Dictionary
  6.     arr = Range("A2:D9")
  7.     For i = 1 To UBound(arr)
  8.         n = d.Count
  9.         If d.Exists(arr(i, 2)) Then
  10.             d(arr(i, 2)) = Array(d(arr(i, 2))(0), d(arr(i, 2))(1) + 1)
  11.         Else
  12.             d.Add arr(i, 2), Array(n + 1, 1)
  13.         End If
  14.     Next i
  15.     ReDim arr1(1 To UBound(arr), 1 To UBound(arr, 2))
  16.     arr2 = d.Items
  17.     For i = 1 To UBound(arr)
  18.         d1(arr(i, 2)) = d1(arr(i, 2)) + 1
  19.         For j = 1 To d(arr(i, 2))(0)
  20.             If j = 1 Then
  21.                 Ro = 0
  22.             Else
  23.                 Ro = Ro + arr2(j - 2)(1)
  24.             End If
  25.         Next j
  26.         Ro = Ro + d1(arr(i, 2))
  27.         For Co = 1 To 4
  28.             arr1(Ro, Co) = arr(i, Co)
  29.         Next Co
  30.     Next i
  31.     Range("F2").Resize(UBound(arr1), UBound(arr1, 2)) = arr1
  32. End Sub
复制代码
模拟附件.rar (10.08 KB, 下载次数: 37)

评分

参与人数 1 +6 收起 理由
不解木野狐 + 6 永远的老师!

查看全部评分

回复

使用道具 举报

发表于 2012-1-30 21:09 | 显示全部楼层
为什么楼主不把附件一起发上来?
回复

使用道具 举报

 楼主| 发表于 2012-1-30 23:20 | 显示全部楼层
TTTTT 发表于 2012-1-30 21:09
为什么楼主不把附件一起发上来?

俺有点懒,还想保密啊{:4812:}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 06:01 , Processed in 0.358467 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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