ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 找出两表中的重复项?

找出两表中的重复项?

作者:绿色风 分类: 时间:2022-08-18 浏览:109
楼主
研究研究
Q:找出两表中的重复项?

A:  多表查找,利用双字典多数组查找


 

  1.     Sheets("sheet3").Range("a1:Y65536") = ""
  2.     Set dic = CreateObject("Scripting.Dictionary")
  3.     Set dic1 = CreateObject("Scripting.Dictionary")
  4.     Dim arr, arr1, arr2()
  5.     arr = Sheets("sheet1").Range("b2:c" & Sheets("sheet1").Range("b65536").End(xlUp).Row)
  6.     arr1 = Sheets("sheet2").Range("b2:c" & Sheets("sheet2").Range("b65536").End(xlUp).Row)
  7.     For x = 1 To UBound(arr)        '循环利用字典快速查找相同
  8.         If Not dic.Exists(arr(x, 1) & "|" & arr(x, 2)) Then
  9.             dic.Add arr(x, 1) & "|" & arr(x, 2), 1
  10.         Else
  11.             dic(arr(x, 1) & "|" & arr(x, 2)) = 2
  12.         End If
  13.     Next x
  14.     For x = 1 To UBound(arr1)
  15.         If Not dic.Exists(arr1(x, 1) & "|" & arr1(x, 2)) Then
  16.             dic.Add arr1(x, 1) & "|" & arr1(x, 2), 1
  17.         Else
  18.             dic(arr1(x, 1) & "|" & arr1(x, 2)) = 2
  19.         End If
  20.     Next x
  21.     For Each x In dic.keys     ‘字典自身循环查找只有一次的数据并将他删了
  22.         If dic.Item(x) = 1 Then dic.Remove (x)
  23.     Next x
  24.     ReDim arr2(1 To dic.Count, 1 To 3)
  25.     y = 1
  26.     For x = 1 To UBound(arr)        ’再次循环查找重复的地址并写入数组中
  27.         If Not dic.Exists(arr(x, 1) & "|" & arr(x, 2)) Then
  28.         Else
  29.             If Not dic1.Exists(arr(x, 1) & "|" & arr(x, 2)) Then
  30.                 dic1.Add arr(x, 1) & "|" & arr(x, 2), y
  31.                 arr2(y, 1) = arr(x, 1)
  32.                 arr2(y, 2) = arr(x, 2)
  33.                 arr2(y, 3) = "shee1:" & x + 1 & "行"
  34.                 y = y + 1
  35.             Else
  36.                 yy = dic1.Item(arr(x, 1) & "|" & arr(x, 2))
  37.                 arr2(yy, 3) = arr2(yy, 3) & ",shee1:" & x + 1 & "行"
  38.             End If
  39.         End If
  40.     Next x
  41.     For x = 1 To UBound(arr1)
  42.         If Not dic.Exists(arr1(x, 1) & "|" & arr1(x, 2)) Then
  43.         Else
  44.             If Not dic1.Exists(arr1(x, 1) & "|" & arr1(x, 2)) Then
  45.                 dic1.Add arr1(x, 1) & "|" & arr1(x, 2), y
  46.                 arr2(y, 1) = arr1(x, 1)
  47.                 arr2(y, 2) = arr1(x, 2)
  48.                 arr2(y, 3) = "shee2:" & x + 1 & "行"
  49.                 y = y + 1
  50.             Else
  51.                 yy = dic1.Item(arr1(x, 1) & "|" & arr1(x, 2))
  52.                 arr2(yy, 3) = arr2(yy, 3) & ",shee2:" & x + 1 & "行"
  53.             End If
  54.         End If
  55.     Next x
  56.     Sheets("sheet3").Range("a1:c" & UBound(arr2)) = arr2        ‘把结果一次性写到工作表里

求助.rar
2楼
亡者天下
找出重复项,其实有更简单的方法的!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap