Excel精英培训网

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

[已解决]求助vba

[复制链接]
发表于 2013-12-19 16:22 | 显示全部楼层 |阅读模式
本帖最后由 yuio123 于 2013-12-19 16:45 编辑

BOOK1.rar (80.49 KB, 下载次数: 25)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-19 16:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xdragon 于 2013-12-19 16:35 编辑
  1. Sub distinct()
  2.   Dim arr, brr, crr(), d1 As Object, d2 As Object, i As Integer, j, cnt As Long, c As Collection
  3.   Set d1 = CreateObject("scripting.dictionary")

  4.   For i = 1 To 4
  5.     arr = Sheets(CStr(i)).Range("K3:K1000")
  6.     For Each j In arr
  7.       d1(i & "|" & j) = d1(i & "|" & j) + 1
  8.     Next
  9.   Next
  10.   arr = d1.keys
  11.   brr = d1.items
  12.   d1.RemoveAll

  13.   Set d2 = CreateObject("scripting.dictionary")
  14.   For i = 0 To UBound(arr)
  15.      j = Split(arr(i), "|")(1)
  16.      d1(j & "|" & brr(i)) = d1(j & "|" & brr(i)) + 1
  17.      If d1(j & "|" & brr(i)) > 2 Then d2(j) = ""
  18.   Next

  19.   Range("A1:A" & d2.Count) = Application.Transpose(d2.keys)
  20. End Sub
复制代码
这题之前有人问过的了。。。
回复

使用道具 举报

发表于 2013-12-19 16:44 | 显示全部楼层
Sub test()
Dim ar1(), ar2%(0 To 999)
For i1% = 1 To Sheets.Count
    With Sheets(i1)
       r% = .[k65536].End(3).Row
       ar1 = .Range("k3:k" & r).Value
       For Each tmp In ar1
           ar2(tmp * 1) = ar2(tmp * 1) + 1
       Next
       r = 0
        For i2% = 0 To 999
           If ar2(i2) > 2 Then
              r = r + 1
              ar1(r, 1) = Right("00" & i2, 3)
           End If
       Next
       Erase ar2
       If r > 0 Then Sheets(1).[a65536].End(3)(2, 1).Resize(r, 1) = ar1
    End With
Next
End Sub
回复

使用道具 举报

发表于 2013-12-19 17:04 | 显示全部楼层
不明白楼主的了,学委的代码是对的?
回复

使用道具 举报

 楼主| 发表于 2013-12-19 17:17 | 显示全部楼层
上清宫主 发表于 2013-12-19 17:04
不明白楼主的了,学委的代码是对的?

不好意思他是错的
回复

使用道具 举报

发表于 2013-12-19 19:31 | 显示全部楼层
  1. Sub distinct()
  2.   Dim arr, brr(), d As Object, i As Integer, j, cnt As Long

  3.   For i = 1 To 4
  4.     arr = Sheets(CStr(i)).Range("K3:K1000")
  5.     Set d = CreateObject("scripting.dictionary")
  6.     For Each j In arr
  7.       d(j) = d(j) + 1
  8.       If d(j) > 2 Then
  9.         cnt = cnt + 1
  10.         ReDim Preserve brr(1 To cnt)
  11.         brr(cnt) = j
  12.       End If
  13.     Next
  14.     Set d = Nothing
  15.   Next
  16.   Range("A1").Resize(cnt) = Application.Transpose(brr)
  17. End Sub
复制代码
楼主啊,这个答的不对你也别评最佳啊,你可以参照上宫的,或者看我这里补充的。
没看清你的题意以为和之前那个是一样的了。。抱歉。。。
回复

使用道具 举报

发表于 2013-12-19 20:38 | 显示全部楼层
学委在6楼还是没补对
回复

使用道具 举报

发表于 2014-1-24 13:09 | 显示全部楼层
上清宫主 发表于 2013-12-19 20:38
学委在6楼还是没补对

上宫你看下,我运行了你的结果看过,你的结果是有两个 000 ,可是根据楼主的意思,应该是每个工作表K列中重复项大于2的才统计吧?我查了几个表,并没有重复的000出现啊。。。我分别做了数据透视表看了下重复值,最多的就是2个,并没有超过2个的>_<
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 20:13 , Processed in 2.058809 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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