ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何统计两列有重复数据的交集、并集、差集?

如何统计两列有重复数据的交集、并集、差集?

作者:绿色风 分类: 时间:2022-08-17 浏览:89
楼主
天南地北
Q:如何统计两列有重复数据的交集、并集、差集?
  1. A、B两列数据存在重复和空值情形,有要求统计A-B(A列有B列没有的),B-A(B列有A列没有的),A∩B(AB列都有的称为交集),A∪B(A或者B列有的称为并集)
A:可以通过如下字典嵌套数组实现
  1. Sub 差集交集并集_天南地北()    'F列输出满后再向G列输出的,但F列到 F65525 就向G列输出了?
  2.     On Error Resume Next
  3.     Dim arr, ar, i&, x&, y&, r&, k&, Crr1
  4.     t = Timer
  5.     Application.ScreenUpdating = False
  6.     Range("C2:G" & Rows.Count).ClearContents
  7.     arr = Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
  8.     ar = Range("B2:B" & Cells(Rows.Count, 2).End(3).Row)
  9.     ReDim CRR(1 To UBound(arr) + UBound(ar), 0 To 3)
  10.     Set dic = CreateObject("scripting.dictionary")
  11.     Set d = CreateObject("scripting.dictionary")
  12.     For i = 1 To UBound(arr)
  13.         dic(arr(i, 1)) = i
  14.         d(arr(i, 1)) = ""
  15.         CRR(i, 3) = arr(i, 1)     '记入brr,合成部分
  16.     Next
  17.     For i = 1 To UBound(ar)
  18.         If dic.exists(ar(i, 1)) Then
  19.             y = y + 1
  20.             CRR(y, 2) = ar(i, 1)    '记入crr,AB共有
  21.             d.Remove (ar(i, 1))     '记入D,删除B在A的数,A有B没有部分
  22.         Else
  23.             x = x + 1
  24.             dic(ar(i, 1)) = UBound(arr) + x
  25.             CRR(UBound(arr) + x, 3) = ar(i, 1)  '记入brr,合成部分
  26.             CRR(x, 1) = ar(i, 1)               '记入crr,B有A没有
  27.         End If
  28.     Next
  29.     r = UBound(arr) + x
  30.     For Each ky In d.keys   '遍历所有keys,放入数crr(i,0)中A有B没有部分
  31.         J = J + 1
  32.         CRR(J, 0) = ky
  33.     Next
  34.     d.RemoveAll
  35.     ReDim Crr1(1 To r, 1 To 5)
  36.     For J = 0 To 3
  37.         Set d = CreateObject("scripting.dictionary")
  38.         n = 0
  39.         For i = 1 To r
  40.             If CRR(i, J) <> "" Then
  41.                 If Not d.exists(CRR(i, J)) Then
  42.                     n = n + 1
  43.                     d(CRR(i, J)) = n
  44.                     Crr1(n, J + 1) = CRR(i, J)
  45.                 End If
  46.             End If
  47.         Next i
  48.     Next J
  49.     Erase CRR
  50.     r = n
  51.     If n > Rows.Count - 1 Then
  52.         r = Rows.Count - 1
  53.         col = 5
  54.         For i = Rows.Count To n
  55.             k = k + 1
  56.             Crr1(k, 5) = Crr1(i, 4)
  57.         Next i
  58.     End If
  59.    
  60.     Range("C2").Resize(r, col) = Crr1
  61.     Application.ScreenUpdating = True
  62.     MsgBox Format(Timer - t, "0.000秒")
  63. End Sub





差集交集并集_天南地北.rar

免责声明

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

评论列表
sitemap