Excel精英培训网

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

[已解决]VBA删除重复并不保留唯一

[复制链接]
发表于 2016-8-3 11:38 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2020-1-13 11:55 编辑

请教各位,如何通过VBA代码对比C列重复的内容,然后整行删除。不保留唯一的重复项。意思是比如1 2 3 1 ,最终结果是 2 3
最佳答案
2016-8-3 16:32
awdrgy1223 发表于 2016-8-3 16:27
意思是不能空白吗?
  1. Sub test()
  2. On Error Resume Next
  3.     Dim i&
  4.     For i = 1 To Cells(1, 3).End(4).Row
  5.         If Application.WorksheetFunction.CountIf(Range(Cells(1, 3), Cells(1, 3).End(4)), Left(Cells(i, 3).Value, 17) & "*") > 1 Then
  6.             Cells(i, 5) = "=1/0": n = n + 1
  7.         End If
  8.     Next
  9.     If n > 0 Then
  10.     Columns(5).Select
  11.     Selection.SpecialCells(xlCellTypeFormulas, 16).Select
  12.     Selection.EntireRow.Delete
  13.     Else
  14.     Exit Sub
  15.     End If
  16. End Sub
复制代码
再改了下代码,去掉后面的空白,重复和太多了,最后只有50来行数据。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-8-3 11:49 | 显示全部楼层
一定要用VBA吗?函数辅助列再筛选删除也挺方便的
回复

使用道具 举报

发表于 2016-8-3 12:21 | 显示全部楼层
  1. Sub test()
  2.     Dim i&
  3.     For i = 1 To Cells(1, 3).End(4).Row
  4.         If Application.WorksheetFunction.CountIf(Range(Cells(1, 3), Cells(1, 3).End(4)), Cells(i, 3).Value) > 1 Then
  5.             Cells(i, 5) = "=1/0"
  6.         End If
  7.     Next
  8.     Columns(5).Select
  9.     Selection.SpecialCells(xlCellTypeFormulas, 16).Select
  10.     Selection.EntireRow.Delete
  11. End Sub
复制代码
VBA代码请参考
回复

使用道具 举报

 楼主| 发表于 2016-8-3 15:37 | 显示全部楼层
本帖最后由 awdrgy1223 于 2016-8-3 15:40 编辑
望帝春心 发表于 2016-8-3 12:21
VBA代码请参考

谢谢您的代码,我运行了一次,出错在代码的第9行。而且我怕数据多了的话运行会慢。
回复

使用道具 举报

发表于 2016-8-3 15:39 | 显示全部楼层
awdrgy1223 发表于 2016-8-3 15:37
我怕数据多的话运行会慢。

那就用代码吧。
回复

使用道具 举报

发表于 2016-8-3 15:44 | 显示全部楼层
本帖最后由 望帝春心 于 2016-8-3 15:47 编辑
awdrgy1223 发表于 2016-8-3 15:37
谢谢您的代码,我运行了一次,出错在代码的第9行。而且我怕数据多了的话运行会慢。

因为你没有重复项吧,我是考虑了必有重复的


回复

使用道具 举报

发表于 2016-8-3 15:52 | 显示全部楼层
awdrgy1223 发表于 2016-8-3 15:37
谢谢您的代码,我运行了一次,出错在代码的第9行。而且我怕数据多了的话运行会慢。
  1. Sub test()
  2. On Error Resume Next
  3.     Dim i&
  4.     For i = 1 To Cells(1, 3).End(4).Row
  5.         If Application.WorksheetFunction.CountIf(Range(Cells(1, 3), Cells(1, 3).End(4)), Cells(i, 3).Value) > 1 Then
  6.             Cells(i, 5) = "=1/0": n = n + 1
  7.         End If
  8.     Next
  9.     If n > 0 Then
  10.     Columns(5).Select
  11.     Selection.SpecialCells(xlCellTypeFormulas, 16).Select
  12.     Selection.EntireRow.Delete
  13.     Else
  14.     Exit Sub
  15.     End If
  16. End Sub
复制代码
改了下代码
回复

使用道具 举报

 楼主| 发表于 2016-8-3 15:52 | 显示全部楼层
望帝春心 发表于 2016-8-3 15:44
因为你没有重复项吧,我是考虑了必有重复的

有重复啊,你下载我的附件用查找找C列第一个内容就知道了,但是用去重复却找不出来,很奇怪。
回复

使用道具 举报

发表于 2016-8-3 15:54 | 显示全部楼层
awdrgy1223 发表于 2016-8-3 15:52
有重复啊,你下载我的附件用查找找C列第一个内容就知道了,但是用去重复却找不出来,很奇怪。

那是肉眼看起来一样而已..
回复

使用道具 举报

发表于 2016-8-3 15:55 | 显示全部楼层
awdrgy1223 发表于 2016-8-3 15:52
有重复啊,你下载我的附件用查找找C列第一个内容就知道了,但是用去重复却找不出来,很奇怪。

举个例子哪几行重复,我眼不太好,告诉第几行跟第几行?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 00:26 , Processed in 0.334365 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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