ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: xing_chen

[求助] 去重不干净

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-22 22:57 | 显示全部楼层
参与一下!

image.png

条件去重.rar

17.73 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 00:56 | 显示全部楼层

谢谢老师!你考虑的真周全。我是03版的,按你的意思修改了但还是有问题。可以再次出手吗?
2023-07-23_0-53-51.jpg
2023-07-23_0-51-34.jpg
2023-07-23_0-52-40.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 00:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

抱歉!花在旅途到时献上

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 14:27 | 显示全部楼层
xing_chen 发表于 2023-7-23 00:57
抱歉!花在旅途到时献上

有老师解答吗!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-23 14:31 | 显示全部楼层
有重复的单元格,若右列有简码,则保留1个有简码的单元格。其它的去重保留任意1个。

TA的精华主题

TA的得分主题

发表于 2023-7-23 16:00 | 显示全部楼层
xing_chen 发表于 2023-7-23 00:56
谢谢老师!你考虑的真周全。我是03版的,按你的意思修改了但还是有问题。可以再次出手吗?

您找到了问题点,但是修改后还有个小问题。改了一个通用版本,请再试试!

条件去重.rar

17.06 KB, 下载次数: 10

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-24 11:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我是新手,学习一下
楼主的代码去重不干净,问题在于: 删除了当前行后,下一行就变成了当前行,下一个循环 i 则会从下一行判断,所以就漏了前一行没有判断。
解决方法,一个是把循环改为从下向上,另一个还是从上向下循环,加一个已删除数量 N, 判断 i -N 行号,这样也能解决问题。
从运算速度来说,这两个不停的删除行,运行比较慢,我用一万行数据试了一下,这两个方法都要30秒左右,差不多。要快一点的话,可以先判断,把不重复数据写入数组,然后全部清除,重新写入数据。

TA的精华主题

TA的得分主题

发表于 2023-7-24 11:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以一万行测试,第一、二种都要30秒上下,第三种则不到0.1秒。

  1. Sub 去重1()

  2. timA = Timer
  3. Sheets("名称").Select
  4. R = [a65536].End(xlUp).Row
  5. N = 0
  6. For i = 2 To R Step 1
  7.     If WorksheetFunction.CountIf(Columns(1), Cells(i - N, 1)) > 1 Then
  8.         Rows(i - N).Delete
  9.         N = N + 1
  10.     End If
  11. Next
  12. MsgBox (Timer - timA)

  13. End Sub
复制代码

  1. Sub 去重2()

  2. timA = Timer
  3. Sheets("名称").Select
  4. R = [a65536].End(xlUp).Row
  5. For i = R To 2 Step -1
  6.     If WorksheetFunction.CountIf(Columns(1), Cells(i, 1)) > 1 Then
  7.         Rows(i).Delete
  8.     End If
  9. Next
  10. MsgBox (Timer - timA)

  11. End Sub
复制代码

  1. Sub 去重3()

  2. Dim i%, N%, R%, S() As String, V
  3. timA = Timer

  4. Sheets("名称").Select
  5. R = [a65536].End(xlUp).Row
  6. Range("A2:A" & R).Sort KEY1:=[A2], Order1:=1, Header:=xlNo
  7. V = Range("A2:A" & R + 1).Value
  8. ReDim S(1 To R)
  9. For i = 1 To R - 1 Step 1
  10.     If V(i, 1) <> V(i + 1, 1) Then
  11.         N = N + 1
  12.         S(N) = V(i, 1)
  13.     End If
  14. Next
  15. Range("A2:A" & R).ClearContents
  16. Range("A2").Resize(R, 1) = Application.Transpose(S)
  17. MsgBox ("共用时" & Timer - timA)

  18. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 14:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
512008404 发表于 2023-7-23 16:00
您找到了问题点,但是修改后还有个小问题。改了一个通用版本,请再试试!

谢谢老师!问题还是未解决。让你费心了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 14:42 | 显示全部楼层
titi012 发表于 2023-7-24 11:29
以一万行测试,第一、二种都要30秒上下,第三种则不到0.1秒。

谢谢老师!运行如愿,若方便话,是否可以将此问题再深入,即按条件去重,保留右列有简码的单元格,无简码的单元俄国删除;其它单元格若右边无简码,则去重时任意保留1个
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 07:28 , Processed in 0.042198 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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