Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2383|回复: 4

[已解决]两列重复值

[复制链接]
发表于 2016-6-18 14:12 | 显示全部楼层 |阅读模式
恳请老师赐教,如何统计两列中出现重复值的数量及位置,详见附件
两列同样数值重复.rar (7.5 KB, 下载次数: 12)
发表于 2016-6-18 15:35 | 显示全部楼层
  1. Sub xx()
  2.     Dim d, i&, j&, n&, arr, brr(), x&, crr, temp&
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheet1
  5.         n = .Cells(.Rows.Count, 8).End(xlUp).Row
  6.         arr = .Range("H4:J" & n)
  7.         For i = 1 To n - 3
  8.             'ReDim Preserve brr(1 To 2, 1 To i)
  9.             If arr(i, 1) < arr(i, 2) Then
  10.                 temp = arr(i, 1)
  11.                 arr(i, 1) = arr(i, 2)
  12.                 arr(i, 2) = temp
  13.             End If
  14.             If Not d.Exists(arr(i, 1) & "_" & arr(i, 2)) Then
  15.                  d.Add arr(i, 1) & "_" & arr(i, 2), i + 3
  16.             Else
  17.                 d(arr(i, 1) & "_" & arr(i, 2)) = d(arr(i, 1) & "_" & arr(i, 2)) & "," & i + 3
  18.             End If
  19.         Next
  20.         For i = 1 To n - 3
  21.             ReDim Preserve brr(1 To 2, 1 To i)
  22.             If InStr(d(arr(i, 1) & "_" & arr(i, 2)), ",") Then
  23.                 crr = Split(d(arr(i, 1) & "_" & arr(i, 2)), ",")
  24.                 For j = 0 To UBound(crr)
  25.                     brr(1, i) = brr(1, i) + arr(crr(j) - 3, 3)
  26.                 Next
  27.                 brr(2, i) = d(arr(i, 1) & "_" & arr(i, 2))
  28.                 d.Remove (arr(i, 1) & "_" & arr(i, 2))
  29.             Else
  30.                 brr(1, i) = ""
  31.                 brr(2, i) = ""
  32.             End If
  33.         Next
  34.         .Range("P4:Q" & n) = Application.WorksheetFunction.Transpose(brr)
  35.     End With
  36. End Sub
复制代码

两列同样数值重复.rar

15.4 KB, 下载次数: 13

评分

参与人数 1 +3 收起 理由
lidayu + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-6-18 16:34 | 显示全部楼层
老司机带带我 发表于 2016-6-18 15:35

老司机带带我 您好,就是要这样效果。我突然想能不能把P、Q列并在P列用(数量-行号),烦请您再帮我改下好吗?谢谢!
回复

使用道具 举报

发表于 2016-6-18 16:50 | 显示全部楼层    本楼为最佳答案   
lidayu 发表于 2016-6-18 16:34
老司机带带我 您好,就是要这样效果。我突然想能不能把P、Q列并在P列用(数量-行号),烦请您再帮我改下 ...
  1. Sub xx()
  2.     Dim d, i&, j&, n&, arr, brr(), x&, crr, temp&, drr()
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheet1
  5.         n = .Cells(.Rows.Count, 8).End(xlUp).Row
  6.         arr = .Range("H4:J" & n)
  7.         For i = 1 To n - 3
  8.             'ReDim Preserve brr(1 To 2, 1 To i)
  9.             If arr(i, 1) < arr(i, 2) Then
  10.                 temp = arr(i, 1)
  11.                 arr(i, 1) = arr(i, 2)
  12.                 arr(i, 2) = temp
  13.             End If
  14.             If Not d.Exists(arr(i, 1) & "_" & arr(i, 2)) Then
  15.                  d.Add arr(i, 1) & "_" & arr(i, 2), i + 3
  16.             Else
  17.                 d(arr(i, 1) & "_" & arr(i, 2)) = d(arr(i, 1) & "_" & arr(i, 2)) & "," & i + 3
  18.             End If
  19.         Next
  20.         For i = 1 To n - 3
  21.             ReDim Preserve brr(1 To 2, 1 To i)
  22.              ReDim Preserve drr(1 To i)
  23.             If InStr(d(arr(i, 1) & "_" & arr(i, 2)), ",") Then
  24.                 crr = Split(d(arr(i, 1) & "_" & arr(i, 2)), ",")
  25.                 For j = 0 To UBound(crr)
  26.                     brr(1, i) = brr(1, i) + arr(crr(j) - 3, 3)
  27.                 Next
  28.                 brr(2, i) = d(arr(i, 1) & "_" & arr(i, 2))
  29.                 d.Remove (arr(i, 1) & "_" & arr(i, 2))
  30.                 drr(i) = brr(1, i) & "-" & brr(2, 1)
  31.             End If
  32.         Next
  33.         .Range("P4:P" & n) = Application.WorksheetFunction.Transpose(drr)
  34.     End With
  35. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
lidayu + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-6-18 17:31 | 显示全部楼层
老司机带带我 发表于 2016-6-18 16:50

您好,能不能在出现重复的行或单元格填充颜色,谢谢!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 12:58 , Processed in 2.540947 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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