Excel精英培训网

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

[已解决]求单列重复与不重复值

  [复制链接]
发表于 2011-8-14 11:03 | 显示全部楼层 |阅读模式
    求单列重复与不重复值
问题:
求高手写一段VBA代码:
1、根据A列的型号明细,在C列中求出对应不重复型号部分和
E列中求出对应重复型号部分。
2、如左边示例,明细A9出现2次,所以出现在重复型号中,其他型号未重复,则出现在C列中。
3、要求代码可以增加到65536行。
4、希望可以有较快的运算速度或者类似字典的方法。

请见附图和附件!谢谢!
最佳答案
2011-8-14 11:57
  1. Sub 求单列重复与不重复值()
  2. Dim i&, r%, rr%, Arr, Arr1(), Arr2()
  3. Dim d, k, t
  4. Set d = CreateObject("Scripting.Dictionary")
  5. Sheet1.Activate
  6. Myr = [a65536].End(xlUp).Row
  7. Arr = Range("a1").CurrentRegion
  8. For i = 2 To UBound(Arr)
  9.     d(Arr(i, 1)) = d(Arr(i, 1)) + 1
  10. Next
  11. k = d.keys
  12. t = d.items
  13. For i = 0 To UBound(k)
  14.     If t(i) = 1 Then
  15.         r = r + 1
  16.         ReDim Preserve Arr1(1 To r)
  17.         Arr1(r) = k(i)
  18.     Else
  19.         rr = rr + 1
  20.         ReDim Preserve Arr2(1 To rr)
  21.         Arr2(rr) = k(i)
  22.     End If
  23. Next
  24. [c2:e100] = ""
  25. [c2].Resize(r, 1) = Application.Transpose(Arr1)
  26. [e2].Resize(rr, 1) = Application.Transpose(Arr2)
  27. Set d = Nothing
  28. End Sub
复制代码
求单列重复与不重复值.jpg

求单列重复与不重复值.zip

6.2 KB, 下载次数: 30

发表于 2011-8-14 11:22 | 显示全部楼层
用下面的代码就可以,是一个版主总结的,我们要感谢编这个代码的人
Sub 把a列不重复值取到e列()
[A:A].AdvancedFilter 2, , [c1], 1
End Sub
回复

使用道具 举报

发表于 2011-8-14 11:57 | 显示全部楼层    本楼为最佳答案   
  1. Sub 求单列重复与不重复值()
  2. Dim i&, r%, rr%, Arr, Arr1(), Arr2()
  3. Dim d, k, t
  4. Set d = CreateObject("Scripting.Dictionary")
  5. Sheet1.Activate
  6. Myr = [a65536].End(xlUp).Row
  7. Arr = Range("a1").CurrentRegion
  8. For i = 2 To UBound(Arr)
  9.     d(Arr(i, 1)) = d(Arr(i, 1)) + 1
  10. Next
  11. k = d.keys
  12. t = d.items
  13. For i = 0 To UBound(k)
  14.     If t(i) = 1 Then
  15.         r = r + 1
  16.         ReDim Preserve Arr1(1 To r)
  17.         Arr1(r) = k(i)
  18.     Else
  19.         rr = rr + 1
  20.         ReDim Preserve Arr2(1 To rr)
  21.         Arr2(rr) = k(i)
  22.     End If
  23. Next
  24. [c2:e100] = ""
  25. [c2].Resize(r, 1) = Application.Transpose(Arr1)
  26. [e2].Resize(rr, 1) = Application.Transpose(Arr2)
  27. Set d = Nothing
  28. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-8-14 13:35 | 显示全部楼层
本帖最后由 etao06407 于 2011-8-14 13:39 编辑

回复 蓝桥玄霜 的帖子

非常感谢楼上的指导。
有个问题请教,如果将此代码放到新建的表中运行的话,会出现“无效的过程调用或参数”,请问出现这种提示的时候,如果修改代码?
注:出问题的代码为:[e2].Resize(rr, 1) = Application.Transpose(Arr2)

回复

使用道具 举报

发表于 2011-8-14 13:43 | 显示全部楼层
etao06407 发表于 2011-8-14 13:35
回复 蓝桥玄霜 的帖子

非常感谢楼上的指导。

[e2].Resize(rr, 1)前面加Sheet2.[e2] ......
回复

使用道具 举报

发表于 2011-8-14 13:45 | 显示全部楼层
本帖最后由 fjmxwrs 于 2011-8-14 13:48 编辑
YXJ01 发表于 2011-8-14 11:22
用下面的代码就可以,是一个版主总结的,我们要感谢编这个代码的人
Sub 把a列不重复值取到e列()
[A:A].Ad ...


学习了,真好的一句提取不重复值,太棒了。
没有试2003,不知道可行不?
回复

使用道具 举报

 楼主| 发表于 2011-8-14 13:59 | 显示全部楼层
本帖最后由 etao06407 于 2011-8-14 14:01 编辑

回复 jiminyanyan 的帖子

改了之后,还是不行啊,有没有好的方法?
回复

使用道具 举报

发表于 2011-8-14 14:07 | 显示全部楼层
完全看不懂~~~不知道是英文差还是EXCEL差
回复

使用道具 举报

发表于 2011-8-14 14:09 | 显示全部楼层
把你认为有问题的附件传上来。。
回复

使用道具 举报

发表于 2011-8-14 14:10 | 显示全部楼层
fjmxwrs 发表于 2011-8-14 13:45
学习了,真好的一句提取不重复值,太棒了。
没有试2003,不知道可行不?

高级筛选,2003可以用的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 21:12 , Processed in 0.145427 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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