ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:VBA实现多条件排重?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-5 10:24 | 显示全部楼层 |阅读模式
想要实现功能:
1.用VBA实现多条件(这里指两个条件)排重;
2.当电话相同单位不同的,则认为不相同,不排重;
3.当电话相同,单位也相同,则认为重复数据,保留最前面一条,删除后面的多条重复数据;
4.如果电话的位数不正确(座机为7位或11位,手机为11位),则直接删除;
5.保留原始数据,将排重后的数据复制到同一工作簿的另一张新表里,并将该表命名为“电话排重”。
6.排重的时候删除直接删除重复数据所在的行。
99.jpg
VBA实现多条件排重.rar (19.09 KB, 下载次数: 10)



TA的精华主题

TA的得分主题

发表于 2018-7-5 11:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Private Sub CommandButton2_Click()
  2. Dim dic As Object, arr, i, j, k
  3. Set dic = CreateObject("scripting.dictionary")
  4. arr = Sheet1.[a1].CurrentRegion
  5. j = UBound(arr, 1)
  6. For i = 2 To j
  7. k = Len(Cells(i, 2))
  8. If k = 7 Or k = 11 Then
  9. If Not dic.exists(Cells(i, 1) & Cells(i, 2)) Then
  10. dic(Cells(i, 1) & Cells(i, 2)) = ""
  11. Else
  12. Rows(i).Cut Sheet2.Range("a65536").End(3).Offset(1, 0)
  13. End If
  14. Else
  15. Rows(i).ClearContents
  16. End If
  17. Next
  18. Range("a1:b" & j).SpecialCells(xlCellTypeBlanks).Delete (xlshifup)
  19. With Sheet2
  20. .Range("a1:b1") = Array("单位", "电话")
  21. .Name = "电话排重"
  22. End With
  23. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-7-5 13:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
函数法 数组公式
  1. =IFERROR(INDEX(A:A,SMALL(IFERROR(IF(MATCH(IF(MMULT(N(LEN($B$2:$B$11)={11,7}),{1;1}),$A$2:$A$11&$B$2:$B$11,""),IF(MMULT(N(LEN($B$2:$B$11)={11,7}),{1;1}),$A$2:$A$11&$B$2:$B$11,1/0),)=ROW($B$1:$B$10),ROW($A$1:$A$10)+1),1>1),ROW(A1))),"")
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-5 18:09 | 显示全部楼层

基本是这个意思,谢谢老师,这里还有一个不明白的问题,Delete (xlshifup)这句,括号中是什么意思?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-5 18:10 | 显示全部楼层
cjc209 发表于 2018-7-5 13:14
函数法 数组公式

谢谢老师的回答,函数与数组使用太过复杂,而且不利于批量操作,作为学习用是可以的,实际操作起来有点麻烦。

TA的精华主题

TA的得分主题

发表于 2018-7-6 08:48 | 显示全部楼层
xhsm2016 发表于 2018-7-5 18:09
基本是这个意思,谢谢老师,这里还有一个不明白的问题,Delete (xlshifup)这句,括号中是什么意思?

下方单元格上移

TA的精华主题

TA的得分主题

发表于 2018-7-6 09:21 | 显示全部楼层
  1. Private Sub CommandButton2_Click()
  2.     Dim SH As Worksheet, rg As Range
  3.     Dim lngRows As Long
  4.     Dim Conn As Object, Rst As Object, strPath As String
  5.     Dim strConn As String, strSQL As String
  6.    
  7.     Set SH = Sheets("Sheet1")
  8.     Set rg = SH.Range("A2")
  9.     lngRows = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
  10.     arr = Sheet1.Range("A2:B" & lngRows)
  11.    
  12.     Set Conn = CreateObject("ADODB.Connection")
  13.     Set Rst = CreateObject("ADODB.Recordset")
  14.     strPath = ThisWorkbook.FullName
  15.     Select Case Application.Version * 1
  16.         Case Is <= 11
  17.             strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & strPath
  18.         Case Is >= 12
  19.             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
  20.     End Select

  21.     Conn.Open strConn

  22.     '''''''''''''''''''''''''''''''''
  23.     strSQL = "SELECT 单位,电话 " & _
  24.               "FROM [Sheet1$A1:B" & lngRows & "] " & _
  25.               "WHERE (Len(电话) = 7 or  Len(电话) =11) " & _
  26.               "Group By 单位,电话;"

  27.     Rst.Open strSQL, Conn, 3, 1

  28.     Sheet1.Range("A2:B" & lngRows).ClearContents

  29.     rg.CopyFromRecordset Rst

  30.     Set Rst = Nothing
  31.     Set Conn = Nothing
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-6 09:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

感谢老师的回答,但是我运行代码的时候出现了这个提示,无法继续运行。
老师可以把你运行成功的文件上传测试下吗?
谢谢。
出错信息提示.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-6 09:42 | 显示全部楼层

TA的精华主题

TA的得分主题

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

如果方便,老师可以,在代码里加入适当的注释吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-6 15:06 , Processed in 0.026891 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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