Excel精英培训网

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

[已解决]提取重复中的不重复数据

[复制链接]
发表于 2014-5-4 08:59 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2014-5-4 10:48 编辑

提取重复中的不重复数据。

'问题有二点:
'重复记录中的不重复,就是重复的只要一条记录就可以了。
'表头不能自动提取


最佳答案
2014-5-4 09:22
  1. Sub 提取重复中的不重复记录()
  2.     time1 = Timer
  3.     ar = Sheets("基本信息").Range("B1:D" & Sheets("基本信息").Cells(Rows.Count, 2).End(3).Row)
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Set d1 = CreateObject("scripting.dictionary")
  6.     ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
  7.     For i = 2 To UBound(ar)
  8.         xkey = ar(i, 3)
  9.         d(xkey) = d(xkey) + 1   '记录重复次数
  10.         If Not d1.exists(xkey) Then d1(xkey) = i   '记录首次出现的行数
  11.         If d(xkey) = 2 Then
  12.             k = k + 1
  13.             For j = 1 To UBound(ar, 2)
  14.                 br(k, j) = ar(d1(xkey), j)
  15.             Next
  16.         End If
  17.     Next
  18.     With Sheets("重复")
  19.         .UsedRange.ClearContents
  20.         .Cells(1, 2).Resize(1, UBound(ar, 2)) = Application.Index(ar, 1)
  21.         .Cells(2, 2).Resize(k, UBound(ar, 2)) = br
  22.     End With
  23.     Application.StatusBar = "耗时:" & Format(Timer - time1, "0.00") & "秒" '在状态栏左下角生成耗时时间。
  24. End Sub


复制代码

提取重复中的不重复数据.rar

424.44 KB, 下载次数: 54

发表于 2014-5-4 09:22 | 显示全部楼层    本楼为最佳答案   
  1. Sub 提取重复中的不重复记录()
  2.     time1 = Timer
  3.     ar = Sheets("基本信息").Range("B1:D" & Sheets("基本信息").Cells(Rows.Count, 2).End(3).Row)
  4.     Set d = CreateObject("scripting.dictionary")
  5.     Set d1 = CreateObject("scripting.dictionary")
  6.     ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
  7.     For i = 2 To UBound(ar)
  8.         xkey = ar(i, 3)
  9.         d(xkey) = d(xkey) + 1   '记录重复次数
  10.         If Not d1.exists(xkey) Then d1(xkey) = i   '记录首次出现的行数
  11.         If d(xkey) = 2 Then
  12.             k = k + 1
  13.             For j = 1 To UBound(ar, 2)
  14.                 br(k, j) = ar(d1(xkey), j)
  15.             Next
  16.         End If
  17.     Next
  18.     With Sheets("重复")
  19.         .UsedRange.ClearContents
  20.         .Cells(1, 2).Resize(1, UBound(ar, 2)) = Application.Index(ar, 1)
  21.         .Cells(2, 2).Resize(k, UBound(ar, 2)) = br
  22.     End With
  23.     Application.StatusBar = "耗时:" & Format(Timer - time1, "0.00") & "秒" '在状态栏左下角生成耗时时间。
  24. End Sub


复制代码
回复

使用道具 举报

发表于 2014-5-4 09:26 | 显示全部楼层
请看附件。用2个字典,字典1记录重复次数,当重复次数为2时取出对应内容;字典2记录首次出现的行数(主要因为重复内容的序号不一致)。

提取重复中的不重复数据.rar

425.91 KB, 下载次数: 22

回复

使用道具 举报

 楼主| 发表于 2014-5-4 09:30 | 显示全部楼层
grf1973 发表于 2014-5-4 09:26
请看附件。用2个字典,字典1记录重复次数,当重复次数为2时取出对应内容;字典2记录首次出现的行数(主要因 ...

        .Cells(1, 2).Resize(1, UBound(ar, 2)) = Application.Index(ar, 1)

红字的二个参数是怎么用的?



回复

使用道具 举报

发表于 2014-5-4 09:34 | 显示全部楼层
Application.Index(ar, k)  表示取数组ar的第k行
Application.Index(ar,, k)  表示取数组ar的第k列


回复

使用道具 举报

发表于 2014-5-4 09:39 | 显示全部楼层
本帖最后由 sayloveyou2010 于 2014-5-4 09:41 编辑

  1. Sub 查询()
  2.     Dim Dic As Object, Arr(), brr(),MyR&, MyC%, k%
  3.     Set Dic = CreateObject("scripting.dictionary")
  4.     Arr = Sheets("基本信息").UsedRange.Value
  5.     ReDim brr(1 To UBound(Arr), 1 To 3)
  6.     For MyR = 1 To UBound(Arr)
  7.         If Not Dic.Exists(Arr(MyR, 3)) Then
  8.             k = k + 1
  9.             Dic.Add Arr(MyR, 3), k
  10.             For MyC = 1 To 3
  11.                 brr(k, MyC) = Arr(MyR, MyC)
  12.             Next MyC
  13.         End If
  14.     Next MyR
  15.     Sheets("效果").Columns("d").NumberFormatLocal = "@"
  16.     Sheets("效果").Range("B1").Resize(k, 3) = brr
  17. End Sub
复制代码

提取重复中的不重复数据.zip

701.33 KB, 下载次数: 7

评分

参与人数 1 +1 收起 理由
张雄友 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-5-4 09:44 | 显示全部楼层
sayloveyou2010 发表于 2014-5-4 09:39

完全错误。
回复

使用道具 举报

发表于 2014-5-4 09:49 | 显示全部楼层
张雄友 发表于 2014-5-4 09:44
完全错误。

结果错误 ?
回复

使用道具 举报

 楼主| 发表于 2014-5-4 09:52 | 显示全部楼层
sayloveyou2010 发表于 2014-5-4 09:49
结果错误 ?

你没认真看问题。
回复

使用道具 举报

发表于 2014-5-4 09:56 | 显示全部楼层
张雄友 发表于 2014-5-4 09:52
你没认真看问题。

{:101:}可能还没睡醒,一会儿有时间再看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 03:13 , Processed in 0.334235 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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