Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: ymq123

[已解决]把每个表中重复行数大于2行的筛选出来

[复制链接]
发表于 2014-4-18 20:40 | 显示全部楼层
ymq123 发表于 2014-4-18 19:47
老师你好,
      我把筛选内容增大了,只有3个表格,但运行时,sh1.Cells(r2, c).Resize(UBound(arr2), ...

说明符合条件的只有一条数据,在转置后就出问题了。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2014-4-18 21:01 | 显示全部楼层
hwc2ycy 发表于 2014-4-18 20:40
说明符合条件的只有一条数据,在转置后就出问题了。

请问,怎么才能筛选出所需要的数据,
回复

使用道具 举报

发表于 2014-4-19 00:15 | 显示全部楼层
ymq123 发表于 2014-4-18 21:01
请问,怎么才能筛选出所需要的数据,

你现在的工作簿在我这测试并没有问题呀。
数据量太多了。


回复

使用道具 举报

发表于 2014-4-19 00:27 | 显示全部楼层
  1. Private Sub CommandButton1_Click()

  2.     Dim arr, arr2
  3.     Dim objDic As Object, objDic2 As Object
  4.     Set objDic = CreateObject("scripting.dictionary")
  5.     Set objDic2 = CreateObject("scripting.dictionary")
  6.     Dim i&, j&, k&
  7.     Dim r&, c&, r2&
  8.     Dim str$, key
  9.     Dim t#
  10.     Dim sh As Worksheet, sh1 As Worksheet
  11.     Set sh = Sheets("1")
  12.     Set sh1 = Sheets("2")
  13.     r2 = 1
  14.     t = Timer
  15.     Application.ScreenUpdating = False
  16.     Application.Interactive = False
  17.     Application.EnableEvents = False
  18.     For r = 1 To 9346 Step 9346
  19.         For c = 1 To 29 Step 14
  20.             With sh.Cells(r, c).Resize(9346, 13)
  21.                 .SpecialCells(xlCellTypeBlanks).Value = "#"
  22.                 arr = .Value
  23.             End With
  24.             For i = 1 To UBound(arr)
  25.                 str = ""
  26.                 For j = 1 To UBound(arr, 2)
  27.                     str = str & arr(i, j) & "@"
  28.                 Next
  29.                 str = Left(str, Len(str) - 1)
  30.                 objDic(str) = objDic(str) + 1
  31.             Next
  32.             For Each key In objDic.keys
  33.                 If objDic(key) > 3 Then
  34.                     objDic2.Add objDic2.Count + 1, Split(key, "@")
  35.                 End If
  36.             Next
  37.             If objDic2.Count Then
  38.                 arr2 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(objDic2.items))
  39.                 If objDic2.Count = 1 Then
  40.                     sh1.Cells(r2, c).Resize(, UBound(arr)).Value = arr2
  41.                 Else
  42.                     sh1.Cells(r2, c).Resize(UBound(arr), UBound(arr, 2)).Value = arr2
  43.                 End If
  44.             End If
  45.             objDic2.RemoveAll
  46.             objDic.RemoveAll
  47.         Next
  48.         r2 = sh1.UsedRange.Rows.Count + 1
  49.     Next
  50.     sh1.UsedRange.Replace "#", ""
  51.     sh.UsedRange.Replace "#", ""
  52.     Application.ScreenUpdating = True
  53.     Application.Interactive = True
  54.     Application.EnableEvents = True
  55.     MsgBox "ok"
  56. End Sub
复制代码
关于1个筛选项的更正。
回复

使用道具 举报

 楼主| 发表于 2014-4-19 10:31 | 显示全部楼层
hwc2ycy 发表于 2014-4-19 00:27
关于1个筛选项的更正。

老师你好,
  请你调试好后,把附件发给我,我把代码代入后,不能运行。
谢谢!
回复

使用道具 举报

发表于 2014-4-20 11:47 | 显示全部楼层
学习
回复

使用道具 举报

发表于 2014-4-21 12:12 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2.     Dim arr, brr(), d As Object, i&, s&, x%, y&, zf$
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Sheets("2").UsedRange.Clear
  5.     gs = 5: ReDim zff(1 To gs)        '每行数字中相同的个数
  6.     For y = 0 To 2
  7.         With Sheets("1")
  8.             arr = .Cells(1, 1 + 14 * y).Resize(.UsedRange.Rows.Count, 13)
  9.         End With
  10.         
  11.         ReDim brr(1 To UBound(arr), 1 To gs)
  12.         For i = 1 To UBound(arr)
  13.             N = 0
  14.             For k = 1 To 13
  15.                 If arr(i, k) > 0 Then N = N + 1: zff(N) = arr(i, k)
  16.             Next
  17.             zf = Join(zff, ",")
  18.             d(zf) = d(zf) + 1
  19.             If d(zf) = 2 Then
  20.                 s = s + 1
  21.                 For x = 1 To gs
  22.                     brr(s, x) = zff(x)
  23.                 Next
  24.             End If
  25.         Next
  26.         Sheets("2").Cells(1, 1 + y * 14).Resize(s, gs) = brr
  27.         s = 0
  28.         d.RemoveAll
  29.     Next
  30. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 15:44 , Processed in 0.244617 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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