ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助代码,取重复值并显示所在行号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-11-20 05:29 | 显示全部楼层 |阅读模式
求助代码,取重复值并显示所在行号,附件中已说明,请老师看附件,谢谢各位老师 VBA找重复值及所在行号的求助.rar (8.69 KB, 下载次数: 57)

TA的精华主题

TA的得分主题

发表于 2016-11-20 06:06 | 显示全部楼层
关注一下连大师都不会解的题目。

TA的精华主题

TA的得分主题

发表于 2016-11-20 08:10 | 显示全部楼层
  1. Sub 找重复值()
  2.     Dim d, d1, i%, arr
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set d1 = CreateObject("scripting.dictionary")
  5.     arr = Range("A1").CurrentRegion
  6.     For i = 2 To UBound(arr)
  7.         d(arr(i, 1)) = IIf(d(arr(i, 1)) = "", i, d(arr(i, 1)) & "," & i)
  8.         d1(arr(i, 1)) = d1(arr(i, 1)) + 1
  9.     Next
  10.     [I5].Resize(d.Count, 3).Clear
  11.     [I5].Resize(d.Count, 3) = Application.Transpose(Array(d.keys, d1.Items, d.Items))
  12. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-11-20 08:52 | 显示全部楼层
  1. Sub lfy_Adele()
  2. Dim d   As Object, arr, r1 As Range, rg  As Range, str As String, crr(1 To 10000, 1 To 6)
  3. Application.ScreenUpdating = False
  4. Range("i2:q10000").ClearContents
  5. arr = Range("a1").CurrentRegion
  6. Set d = CreateObject("Scripting.Dictionary")
  7. For x = 2 To UBound(arr)
  8.     d(arr(x, 1)) = d(arr(x, 1)) + 1
  9. Next x
  10. s = d.keys: t = d.items
  11. For x = 0 To UBound(s)
  12.     With Sheets("数据").Range("A1:A65536")
  13.         Set c = .Find(s(x), , , 1)
  14.         If Not c Is Nothing Then
  15.             firstAddress = c.Address
  16.             a = c.Row
  17.             Do
  18.                 Set c = .FindNext(c)
  19.                 If Not c Is Nothing Then
  20.                     If firstAddress <> c.Address Then
  21.                         aa = c.Row
  22.                         If Len(aa) Then
  23.                             n = n + 1: crr(n, 1) = aa
  24.                         End If
  25.                     End If
  26.                 End If
  27.             Loop While c.Address <> firstAddress
  28.         End If
  29.     End With
  30.     Cells(x + 2, "k") = a: Cells(x + 2, "l").Resize(1, 6) = Application.Transpose(crr)
  31.      Erase crr: n = 0
  32.     Next x
  33. [i2].Resize(d.Count, 1) = Application.Transpose(s)
  34. [j2].Resize(d.Count, 1) = Application.Transpose(t)
  35. Application.ScreenUpdating = True
  36. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-11-20 08:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

思路清晰,代码简练,不愧大侠风范。
在此小补一个 IF 判断,屏蔽一下不重复的记录。献丑了。
  1. Sub 找重复值()
  2. Dim d, d1, i%, arr
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set d1 = CreateObject("scripting.dictionary")
  5.     arr = Range("A1").CurrentRegion
  6.     For i = 2 To UBound(arr)
  7.     If Application.WorksheetFunction.CountIf(Range("A:A"), arr(i, 1)) > 1 Then
  8.         d(arr(i, 1)) = IIf(d(arr(i, 1)) = "", i, d(arr(i, 1)) & "," & i)
  9.         d1(arr(i, 1)) = d1(arr(i, 1)) + 1
  10.     End If
  11.     Next
  12.     [I5].Resize(d.Count, 3).Clear
  13.     [I5].Resize(d.Count, 3) = Application.Transpose(Array(d.keys, d1.Items, d.Items))
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-11-20 08:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
班门弄斧,请老师指导。

VBA找重复值及所在行号的求助-lfy_Adele.rar

11.95 KB, 下载次数: 39

TA的精华主题

TA的得分主题

发表于 2016-11-20 09:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lsc900707 于 2016-11-20 09:49 编辑

大师,献丑了:
Sub lee()
    tms = Time
    Dim arr, i, dr As Object, ds As Object
    arr = Sheet1.Range("a1:a" & [a65536].End(3).Row)
    Set dr = CreateObject("scripting.dictionary")
    Set ds = CreateObject("scripting.dictionary")
    For i = 2 To UBound(arr)
         If Application.WorksheetFunction.CountIf([A:A], arr(i, 1)) >= 2 Then
             dr(arr(i, 1)) = dr(arr(i, 1)) + 1
             ds(arr(i, 1)) = ds(arr(i, 1)) & "," & i
         End If
    Next
    Range("I2:K" & [a65536].End(3).Row).ClearContents
    [I2].Resize(dr.Count, 1) = Application.Transpose(dr.keys)
    [J2].Resize(dr.Count, 1) = Application.Transpose(dr.Items)
    [K2].Resize(ds.Count, 1) = Application.Transpose(ds.Items)
    MsgBox Format(Time - tms, "0.0000s")
End Sub

TA的精华主题

TA的得分主题

发表于 2016-11-20 09:52 | 显示全部楼层
lsc900707 发表于 2016-11-20 09:47
大师,献丑了:
Sub lee()
    tms = Time

附件还是贴一下>>>>>>>>>>>

VBA找重复值及所在行号的求助.rar

11.92 KB, 下载次数: 59

TA的精华主题

TA的得分主题

发表于 2016-11-20 10:16 | 显示全部楼层
本帖最后由 hhjjpp 于 2016-11-20 10:31 编辑

我总觉得可以懒一点、少一些、快一次!
  1. Private Sub CommandButton1_Click()
  2. Dim arr, n&, d, drr, i&
  3. n = [a65536].End(xlUp).Row - 1
  4. arr = [a2].Resize(n)
  5. ReDim drr(1 To n, 1 To 10)
  6. Set d = CreateObject("scripting.dictionary")
  7. For i = 1 To n
  8.     If Not d.exists(arr(i, 1)) Then d(arr(i, 1)) = d.Count + 1 '字典item存key序号,利用数组运算,确保使用最少字典
  9.     drr(d(arr(i, 1)), 1) = drr(d(arr(i, 1)), 1) + 1            'drr(,1)对key出现次数计数
  10.     drr(d(arr(i, 1)), drr(d(arr(i, 1)), 1) + 1) = i + 1        '写个重复值对应行数到drr
  11. Next
  12. [c2].Resize(d.Count) = Application.Transpose(d.keys)
  13. [d2].Resize(n, 10) = drr
  14. End Sub
复制代码

VBA找重复值及所在行号-h.rar

10.44 KB, 下载次数: 66

TA的精华主题

TA的得分主题

发表于 2016-11-20 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. rivate Sub CommandButton1_Click()
  2. Dim arr, n&, d, drr, i&
  3. n = [a65536].End(xlUp).Row - 1
  4. arr = [a2].Resize(n)
  5. ReDim drr(1 To n, 1 To 2)
  6. Set d = CreateObject("scripting.dictionary")
  7. For i = 1 To n
  8.     If Not d.exists(arr(i, 1)) Then d(arr(i, 1)) = d.Count + 1                                   '字典item存key序号,利用数组运算,确保使用最少字典
  9.     drr(d(arr(i, 1)), 1) = drr(d(arr(i, 1)), 1) + 1                                              'drr(,1)对key出现次数计数
  10.     drr(d(arr(i, 1)), 2) = IIf(drr(d(arr(i, 1)), 1) > 1, drr(d(arr(i, 1)), 2) & ",", "") & i + 1 '重复值行次汇集到drr
  11. Next
  12. [p2].Resize(d.Count) = Application.Transpose(d.keys)
  13. [q2].Resize(n, 2) = drr
  14. End Sub
复制代码

重复值逐一罗列行号-字典 数组-h.rar

15.66 KB, 下载次数: 55

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

本版积分规则

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

GMT+8, 2024-11-22 08:36 , Processed in 0.037917 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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