Excel精英培训网

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

[已解决]重复值提取

[复制链接]
发表于 2012-10-2 11:12 | 显示全部楼层 |阅读模式
重复值提取.rar (1.95 KB, 下载次数: 32)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-10-2 11:32 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-2 11:33 编辑

考虑如果重复值不止一个,则重复值之间用逗号相隔,显示在单元格内。
  1. Sub 重复值提取()
  2.     Dim sCFMC As String
  3.     Dim arr
  4.     Dim dic As Object
  5.     Dim i As Long
  6.     Dim arrKey, arrItem
  7.     Dim sRst As String
  8.     On Error Resume Next
  9.     Set dic = CreateObject("scripting.dictionary")
  10.     arr = Range("a2:b" & [a2].End(xlDown).Row).Value
  11.     sCFMC = [I2].Value
  12.     For i = 1 To UBound(arr)
  13.         If arr(i, 1) = sCFMC Then
  14.             dic(arr(i, 2)) = dic(arr(i, 2)) + 1
  15.         End If
  16.     Next
  17.     arrKey = dic.Keys
  18.     arrItem = dic.items
  19.     For i = 0 To UBound(arrItem)
  20.         If arrItem(i) > 1 Then
  21.             sRst = IIf(sRst = "", arrKey(i), sRst & "," & arrKey(i))
  22.             '[I4] = arrKey(i)
  23.             'Exit For
  24.         End If
  25.     Next
  26.     [i4] = sRst
  27. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-2 11:34 | 显示全部楼层
如果只取第一个重复值
  1. Sub 重复值提取()
  2.     Dim sCFMC As String
  3.     Dim arr
  4.     Dim dic As Object
  5.     Dim i As Long
  6.     Dim arrKey, arrItem
  7.     Dim sRst As String
  8.     On Error Resume Next
  9.     Set dic = CreateObject("scripting.dictionary")
  10.     arr = Range("a2:b" & [a2].End(xlDown).Row).Value
  11.     sCFMC = [I2].Value
  12.     For i = 1 To UBound(arr)
  13.         If arr(i, 1) = sCFMC Then
  14.             dic(arr(i, 2)) = dic(arr(i, 2)) + 1
  15.         End If
  16.     Next
  17.     arrKey = dic.Keys
  18.     arrItem = dic.items
  19.     For i = 0 To UBound(arrItem)
  20.         If arrItem(i) > 1 Then
  21.             'sRst = IIf(sRst = "", arrKey(i), sRst & "," & arrKey(i))
  22.             [I4] = arrKey(i)
  23.             Exit For
  24.         End If
  25.     Next
  26.     '[I4] = sRst
  27. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-2 11:38 | 显示全部楼层    本楼为最佳答案   
重复值提取.rar (10.41 KB, 下载次数: 69)
回复

使用道具 举报

 楼主| 发表于 2012-10-2 12:31 | 显示全部楼层
hwc2ycy 发表于 2012-10-2 11:38

谢谢。能否用函数达成!
回复

使用道具 举报

发表于 2012-10-2 14:40 | 显示全部楼层
hwc2ycy 发表于 2012-10-2 11:38

向你学习!这个方法不错.
回复

使用道具 举报

发表于 2012-10-2 14:45 | 显示全部楼层
  1. =IF(COUNTIF(OFFSET($B$1,MATCH($I$2,$A$2:$A$25,),,COUNTIF($A$2:$A$25,$I$2)),OFFSET($B$1,MATCH($I$2,$A$2:$A$25,),,COUNTIF($A$2:$A$25,$I$2)))>1,OFFSET($B$1,MATCH($I$2,$A$2:$A$25,),,COUNTIF($A$2:$A$25,$I$2)),"")
复制代码
试下这个公式,若是有几个重复的也可以。
回复

使用道具 举报

发表于 2012-10-2 14:53 | 显示全部楼层
zhoucs00 发表于 2012-10-2 14:45
试下这个公式,若是有几个重复的也可以。

是数组函数吧?运行结果不正确。请核实,谢谢!
回复

使用道具 举报

发表于 2012-10-2 15:27 | 显示全部楼层
WANGL2 发表于 2012-10-2 14:53
是数组函数吧?运行结果不正确。请核实,谢谢!

我函数只能做出这样的结果了。看来还是得学VBA……
未命名.jpg
回复

使用道具 举报

发表于 2012-10-2 15:35 | 显示全部楼层
jlf2003 发表于 2012-10-2 14:40
向你学习!这个方法不错.

大家相互学习才是。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:01 , Processed in 0.238829 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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