Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: zhaongxa

[已解决]需要个VBA才能解决

[复制链接]
发表于 2013-3-22 14:01 | 显示全部楼层    本楼为最佳答案   
注释两句就成了。
  1. Sub 提取()
  2.     '源数据,结果数组,记录个数,临时数组
  3.     Dim arr, result(1 To 65536, 1 To 1), lCount&, arrTemp

  4.     '字典数组
  5.     Dim a, b, arrCount()

  6.     '取源数据
  7.     arr = Range("g3").CurrentRegion
  8.     '定义字典数组
  9.     ReDim arrCount(1 To UBound(arr, 2))
  10.     '临时字典
  11.     Dim dic As Object
  12.     'Set dic = CreateObject("scripting.dictionary")
  13.     'Set dic2 = CreateObject("scripting.dictionary")

  14.     For i = LBound(arr, 2) To UBound(arr, 2)
  15.         '每列数据一个字典
  16.         Set arrCount(i) = CreateObject("scripting.dictionary")
  17.         Set dic = arrCount(i)
  18.         '取指定列数据
  19.         arrTemp = WorksheetFunction.Index(arr, 0, i)
  20.         '统计重复个数
  21.         For Each a In arrTemp
  22.             If Len(a) = 0 Then Exit For
  23.             dic(a) = dic(a) + 1
  24.         Next
  25.         Set dic = Nothing
  26.     Next

  27.     '根据重复次数统计每列符合条件的数据,另外再统计达到5次要求的。
  28.     '临时字典,求有5次重复的数据
  29.     For j = 2 To 6
  30.         Set dic = CreateObject("scripting.dictionary")
  31.         '遍历每列统计结果
  32.         For Each a In arrCount
  33.             For Each b In a.keys
  34.                 If a(b) = j Then
  35.                     'lCount = lCount + 1
  36.                     'result(lCount, 1) = "'" & b
  37.                     dic(b) = dic(b) + 1
  38.                 End If
  39.             Next
  40.         Next

  41.         '遍历所有列相同数据的重复次数
  42.         For Each a In dic.keys
  43.             If dic(a) = 5 Then
  44.                 lCount = lCount + 1
  45.                 result(lCount, 1) = "'" & a
  46.             End If
  47.         Next
  48.         Set dic = Nothing
  49.     Next

  50.     Range("a1").Resize(lCount) = result
  51. End Sub
复制代码
回复

使用道具 举报

发表于 2013-3-22 14:03 | 显示全部楼层
最后用个判断吧,免得0条记录出错。
  1. Sub 提取()
  2.     '源数据,结果数组,记录个数,临时数组
  3.     Dim arr, result(1 To 65536, 1 To 1), lCount&, arrTemp

  4.     '字典数组
  5.     Dim a, b, arrCount()

  6.     '取源数据
  7.     arr = Range("g3").CurrentRegion
  8.     '定义字典数组
  9.     ReDim arrCount(1 To UBound(arr, 2))
  10.     '临时字典
  11.     Dim dic As Object
  12.     'Set dic = CreateObject("scripting.dictionary")
  13.     'Set dic2 = CreateObject("scripting.dictionary")

  14.     For i = LBound(arr, 2) To UBound(arr, 2)
  15.         '每列数据一个字典
  16.         Set arrCount(i) = CreateObject("scripting.dictionary")
  17.         Set dic = arrCount(i)
  18.         '取指定列数据
  19.         arrTemp = WorksheetFunction.Index(arr, 0, i)
  20.         '统计重复个数
  21.         For Each a In arrTemp
  22.             If Len(a) = 0 Then Exit For
  23.             dic(a) = dic(a) + 1
  24.         Next
  25.         Set dic = Nothing
  26.     Next

  27.     '根据重复次数统计每列符合条件的数据,另外再统计达到5次要求的。
  28.     '临时字典,求有5次重复的数据
  29.     For j = 2 To 6
  30.         Set dic = CreateObject("scripting.dictionary")
  31.         '遍历每列统计结果
  32.         For Each a In arrCount
  33.             For Each b In a.keys
  34.                 If a(b) = j Then
  35.                     'lCount = lCount + 1
  36.                     'result(lCount, 1) = "'" & b
  37.                     dic(b) = dic(b) + 1
  38.                 End If
  39.             Next
  40.         Next

  41.         '遍历所有列相同数据的重复次数
  42.         For Each a In dic.keys
  43.             If dic(a) = 5 Then
  44.                 lCount = lCount + 1
  45.                 result(lCount, 1) = "'" & a
  46.             End If
  47.         Next
  48.         Set dic = Nothing
  49.     Next
  50.     If lCount > 0 Then Range("a1").Resize(lCount) = result
  51. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-3-22 14:25 | 显示全部楼层
hwc2ycy 发表于 2013-3-22 14:03
最后用个判断吧,免得0条记录出错。

应该还少了一个条件 数据.rar (54.48 KB, 下载次数: 5)
回复

使用道具 举报

发表于 2013-3-22 14:35 | 显示全部楼层
自己改吧,我不想动了,不停的改来改去。
回复

使用道具 举报

发表于 2013-3-22 14:40 | 显示全部楼层
你先告诉你这个需求在实际中用做什么?
回复

使用道具 举报

发表于 2013-3-22 15:07 | 显示全部楼层
不肯透露下?
回复

使用道具 举报

 楼主| 发表于 2013-3-22 15:11 | 显示全部楼层
hwc2ycy 发表于 2013-3-22 15:07
不肯透露下?

我的水平看都看不懂,为什么不让自己的作品更完美呢?
回复

使用道具 举报

发表于 2013-3-22 15:13 | 显示全部楼层
我这都改好了,你告诉我下,你这实际中做什么用的,{:912:}
回复

使用道具 举报

 楼主| 发表于 2013-3-22 15:54 | 显示全部楼层
hwc2ycy 发表于 2013-3-22 15:13
我这都改好了,你告诉我下,你这实际中做什么用的,

天呀,这实际上能做什么用,不就是破网题用吗
回复

使用道具 举报

发表于 2013-3-22 16:06 | 显示全部楼层
  1. Sub 提取()

  2.     Dim arr, result(1 To 3000, 1 To 1), lCount&, arrTemp
  3.     Dim a, b, arrCount()
  4.     Dim i&, k&

  5.     arr = Range("g3").CurrentRegion
  6.     ReDim arrCount(1 To 5)
  7.     Dim dic As Object
  8.     'Set dic = CreateObject("scripting.dictionary")
  9.     'Set dic2 = CreateObject("scripting.dictionary")
  10.     For i = LBound(arr, 2) To UBound(arr, 2) - 4
  11.         For k = i To i + 4
  12.             Set arrCount(k - i + 1) = CreateObject("scripting.dictionary")
  13.             Set dic = arrCount(k - i + 1)
  14.             arrTemp = WorksheetFunction.Index(arr, 0, k)

  15.             For Each a In arrTemp
  16.                 If Len(a) = 0 Then Exit For
  17.                 dic(a) = dic(a) + 1
  18.             Next
  19.             Set dic = Nothing
  20.         Next

  21.         For j = 2 To 6
  22.             Set dic = CreateObject("scripting.dictionary")
  23.             For Each a In arrCount
  24.                 For Each b In a.keys
  25.                     If a(b) = j Then
  26.                         'lCount = lCount + 1
  27.                         'result(lCount, 1) = "'" & b
  28.                         dic(b) = dic(b) + 1
  29.                     End If
  30.                 Next
  31.             Next

  32.             For Each a In dic.keys
  33.                 If dic(a) = 5 Then
  34.                     lCount = lCount + 1
  35.                     result(lCount, 1) = "'" & a
  36.                 End If
  37.             Next
  38.             Set dic = Nothing
  39.         Next
  40.     Next

  41. If lCount > 0 Then Range("A1").Resize(lCount) = result
  42. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 01:46 , Processed in 0.576241 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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