ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查询重复次数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-25 14:54 | 显示全部楼层
lrh788 发表于 2018-5-25 14:37
速度非常快,2秒多,只是不知 Debug.Print Timer - dt是什么意思?

没什么用,只是打印出总的处理时间。

我没想到你会拿70万条数据作测试,这里的意思还是拿你那70条数据作测试,然后跟10楼的用时作比较。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-25 15:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lrh788 于 2018-6-7 12:34 编辑

Sub 判断重复()
  Dim arr, dic, i, s, t
  Application.ScreenUpdating = False
  t = Timer
  Set dic = CreateObject("scripting.dictionary")
  arr = Range("a1").CurrentRegion
  For i = 1 To UBound(arr, 1)
    s = arr(i, 1) & arr(i, 2) & arr(i, 3)
    dic(s) = dic(s) + 1
    arr(i, 1) = IIf(dic(s) > =1, Format(dic(s) - 1, "重复0次"), vbNullString) '=1时唯一值为"重复0次"
  Next
   [k1].Resize(UBound(arr, 1)) = arr
    Set dic = Nothing:    Erase arr
   MsgBox "判断用时:" & Format(Timer - t, "0.00") & "秒"
   Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-6 17:57 | 显示全部楼层
本帖最后由 lrh788 于 2018-6-7 14:57 编辑

如果判断结果是不重复就标注为唯一。如果判断结果为重复,就从第一个起标注重复0次第二个标重复1次,依此类推!!!请各位老师完善下代码!



TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-7 12:33 | 显示全部楼层
一把小刀闯天下 发表于 2018-5-25 13:02
'先对数据区进行排序,按A、B、C列键值排序
'如果顺序不能改变,等输出后再按某列进行排序进行恢复。这个 ...

一把小刀闯天下老师,我有个新要求,如果a、b、c列数据无重复时就在d列显示“唯一“;如果a、b、c列数据出现重复时,从第一个起,在d列分别显示“重复0次、重复1次、重复2次………依此类推……请完善下代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-7 13:20 来自手机 | 显示全部楼层
本帖最后由 lrh788 于 2018-6-7 13:26 编辑

如果不重复就标注为唯一。如果出现重复,第一个起标注重复0次,第二个标重复1次,……依此类推!!!

TA的精华主题

TA的得分主题

发表于 2018-6-7 14:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lrh788 发表于 2018-6-7 12:33
一把小刀闯天下老师,我有个新要求,如果a、b、c列数据无重复时就在d列显示“唯一“;如果a、b、c列数据 ...

'修改19楼代码。条件一样:A、B、C列有序,[a3]开始

Option Explicit

Sub test()
  Dim i As Long, j As Long, k As Long, n As Long, arr, dt
  Application.ScreenUpdating = False
  dt = Timer
  arr = Range("a3:c" & Cells(Rows.Count, "a").End(xlUp).Row + 1)
  ReDim brr(1 To UBound(arr, 1), 1 To 1) As String
  For i = 1 To UBound(arr, 1) - 1
    For j = i To UBound(arr, 1) - 1
      If arr(j, 1) & arr(j, 2) & arr(j, 3) <> arr(j + 1, 1) & arr(j + 1, 2) & arr(j + 1, 3) Then
        If j > i Then
          n = 0
          For k = i To j
            brr(k, 1) = "重复" & n: n = n + 1
          Next
        Else
          brr(j, 1) = "唯一"
        End If
        i = j: Exit For
      End If
  Next j, i
  [d3].Resize(UBound(brr, 1)) = brr
  Debug.Print Timer - dt
  Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-7 14:50 | 显示全部楼层
一把小刀闯天下 发表于 2018-6-7 14:34
'修改19楼代码。条件一样:A、B、C列有序,[a3]开始

Option Explicit

老师,如果abc三列中任何一列为空,只要其他两列同时相同也可视为重复,否则,视为唯一

TA的精华主题

TA的得分主题

发表于 2018-6-7 14:58 | 显示全部楼层
lrh788 发表于 2018-6-7 14:50
老师,如果abc三列中任何一列为空,只要其他两列同时相同也可视为重复,否则,视为唯一

假设:
第3行3列:
1,  ,3
第4行3列:
1,2,3
3、4行作为相同处理?就是同行3列中可以有单列为空,只要其它对应的2列相同即为相同?

另外还是70万条数据吗?因为有序适合对巨量数据处理。如果数据量小可以用字典来解决。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-7 15:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
假设:
第3行3列:
1,  ,3
第4行3列:
1,,3
3、4行作为相同处理?就是同行3列中可以有单列为空,只要其它对应的2列相同即为相同?
另外,
第6行3列:
1,2  
第10行3列:
1,2
6、10行作为相同处理?就是同行3列中可以有单列为空,只要其它对应的2列相同即为相同?
另外,
第18行3列:
    2  ,3
第30行3列:
    2  ,3
18、30行作为相同处理?就是同行3列中可以有单列为空,只要其它对应的2列相同即为相同?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-7 15:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一把小刀闯天下 发表于 2018-6-7 14:58
假设:
第3行3列:
1,  ,3

老师,你的代码中,哪个语句有排序功能
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 14:52 , Processed in 0.038661 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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