Excel精英培训网

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

[已解决]VBA筛选前三名

[复制链接]
发表于 2015-2-8 15:09 | 显示全部楼层 |阅读模式
本帖最后由 zss7758258 于 2015-2-8 17:07 编辑

筛选前三名.zip (21.9 KB, 下载次数: 9)
发表于 2015-2-8 16:19 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, ar, d, m%, i&, j%, k%, l%, s&
  3. Set d = CreateObject("scripting.dictionary")
  4. n = Range("o65536").End(xlUp).Row
  5. [u:ae].NumberFormatLocal = "@"
  6. For m = 11 To 15 Step 4
  7.     ll = IIf(m = 11, 4, 2) '频率在数组中的列
  8.     arr = Cells(1, m).Resize(n, 5)
  9.     ReDim ar(1 To UBound(arr), 1 To UBound(arr, 2))
  10.     For i = 2 To UBound(arr)
  11.         If Not d.exists(arr(i, ll)) Then
  12.             d(arr(i, ll)) = i
  13.         Else
  14.             d(arr(i, ll)) = d(arr(i, ll)) & "," & i
  15.         End If
  16.     Next
  17.     s = 0
  18.     For j = 1 To 3 '前3名
  19.         x = Application.Large(d.keys, j)
  20.         y = Split(d(x), ",")
  21.         For k = 0 To UBound(y)
  22.             s = s + 1
  23.             For l = 1 To UBound(arr, 2)
  24.                 ar(s, l) = arr(y(k), l)
  25.             Next
  26.         Next
  27.     Next
  28.     lie = IIf(m = 11, 21, 27)
  29.     Cells(1, m).Resize(1, 5).Copy Cells(1, lie)
  30.     Cells(2, lie).Resize(s, UBound(ar, 2)) = ar
  31.     d.RemoveAll
  32. Next
  33. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
zss7758258 + 3 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 06:18 , Processed in 0.271920 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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