ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 查询重复次数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-24 19:43 | 显示全部楼层 |阅读模式
本帖最后由 lrh788 于 2018-6-9 21:12 编辑

请各位大神用代码表达,如果没有重复,就在d列显示"唯一"。当出现a、b、c列重复数据时,从第一个起,在d列显示“重复0次、重复1次………依此类推……


新建 Mi.zip

7.37 KB, 下载次数: 29

TA的精华主题

TA的得分主题

发表于 2018-5-24 19:53 | 显示全部楼层
=TEXT(COUNTIFS(A$3:A3,A3,B$3:B3,B3,C$3:C3,C3)-1,"重复0次;;")

TA的精华主题

TA的得分主题

发表于 2018-5-24 20:06 | 显示全部楼层
  1. Sub test()
  2. Dim d, lr&, i&, j&, drr, brr, r&
  3. With ThisWorkbook.Sheets("Sheet1")
  4. Set d = CreateObject("Scripting.Dictionary")
  5. lr = .Range("A65536").End(xlUp).Row
  6. drr = .Range("A3:C" & lr)
  7. ReDim brr(1 To 65536, 1 To 1)
  8. For i = 1 To UBound(drr)
  9.     r = r + 1
  10.     Sr = drr(i, 1) & drr(i, 2) & drr(i, 3)
  11.     If d.exists(Sr) Then
  12.         brr(r, 1) = "重复" & d(Sr) & "次"
  13.         d(Sr) = d(Sr) + 1
  14.     Else
  15.         d(Sr) = d(Sr) + 1
  16.     End If
  17. Next
  18. .Range("D3:D65536").Clear
  19. .Range("D3").Resize(r, 1) = brr
  20. End With
  21. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 20:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
fxl447098457 发表于 2018-5-24 19:53
=TEXT(COUNTIFS(A$3:A3,A3,B$3:B3,B3,C$3:C3,C3)-1,"重复0次;;")

谢谢,公式符合要求!!数据多时运行较慢,能用代码更好

TA的精华主题

TA的得分主题

发表于 2018-5-24 20:31 | 显示全部楼层
详见附件。。。。。。。。。。。。。。。

testt.zip

16.19 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2018-5-24 20:40 | 显示全部楼层
这就是你想要的效果吧

新建 Microsoft Excel 工作表.rar

16.18 KB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 20:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chentonny 发表于 2018-5-24 20:40
这就是你想要的效果吧

你的代码结果有点问题,
TV        11        TV11       
TV        11        TV11        1
TV        11        TV11        2
TV        11        TV11        3
TV        12        TV12       
TV        13        TV13       
AC        1        AC1       
AC        2        AC2       
AC        3        AC3       
TV        13        TV13        4

TA的精华主题

TA的得分主题

发表于 2018-5-24 21:26 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, dic, i, t
  Set dic = CreateObject("scripting.dictionary")
  arr = Range("a3:c" & Cells(Rows.Count, "a").End(xlUp).Row)
  For i = 1 To UBound(arr, 1)
    t = arr(i, 1) & arr(i, 2) & arr(i, 3)
    dic(t) = dic(t) + 1
    arr(i, 1) = IIf(dic(t) > 1, Format(dic(t) - 1, "重复0次"), vbNullString)
  Next
  [e3].Resize(UBound(arr, 1)) = arr '作比较用,输出位置自己修改
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 21:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-24 22:34 来自手机 | 显示全部楼层
从代码运行时间看,在70万行数据表中比对,3楼67秒多,5楼49秒多,8楼54秒多。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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