ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何比对工作表,返回满足条件的重复记录?

如何比对工作表,返回满足条件的重复记录?

作者:绿色风 分类: 时间:2022-08-17 浏览:115
楼主
liuguansky
Q:对工作簿中的非"汇总"工作表的任意两个表相比较,如果其中2个表的股东名称相同,且满足a列为个人股东(也就是股东名称不超过三个字)、e列为“新进”时,将其在各表中的整行添加到“汇总”表中(在汇总表里有个示范),方便对照查看。因为每个季度都增加一张新工作表。
A:用如下代码可以实现:

  1. Sub JusTTesT()
  2.     Dim D, Arr(), n As Byte, Ar, sn As Byte, i&, j As Byte, K&, ArrR() As String '定义变量
  3.     Set D = CreateObject("scripting.dictionary") '创建字典项目
  4.     ReDim Arr(1 To Sheets.Count - 1) '定义工作表数据区域数组,用于储存各表数据
  5.     For sn = 1 To Sheets.Count '循环工作表
  6.         If Sheets(sn).Name <> "汇总" Then '对非汇总表进行处理
  7.             n = n + 1 '返回满足工作表的数组序号
  8.             Arr(n) = Sheets(sn).Range("a1").CurrentRegion.Value '对数据区域进行赋值予数组
  9.             For i = 1 To UBound(Arr(n), 1) '循环数组,进行处理
  10.                 If Trim(Arr(n)(i, 4)) = "个人" And Trim(Arr(n)(i, 5)) = "新进" Then
  11.                 '如果股东性质为个人,为新进,则:
  12.                 '加TRIM为防止空格的影响
  13.                     If D.exists(Arr(n)(i, 1)) Then '如果存在字典项目
  14.                         Ar = D(Arr(n)(i, 1)): Ar(2) = Ar(2) + 1: D(Arr(n)(i, 1)) = Ar
  15.                         '则对字典的ITEM值进行重新赋值,把ITEM数组中的第三个元素进行累加处理
  16.                         'ITEM数组的第一个元素用来标记数组的位置
  17.                         'ITEM数组的第二个元素用来标记数组中对应值的位置
  18.                         'ITEM数组的第三个元素用来标记数组中满足条件的股东信息条数
  19.                         K = K + 1: ReDim Preserve ArrR(1 To 7, 1 To K)
  20.                         '对重复的记录进行动态数组的返回
  21.                         For j = 1 To 7
  22.                             ArrR(j, K) = Arr(n)(i, j)
  23.                         Next j
  24.                         If D(Arr(n)(i, 1))(2) = 1 Then
  25.                         '如果是第二次重复则要返回第一次的值。
  26.                             K = K + 1: ReDim Preserve ArrR(1 To 7, 1 To K)
  27.                             For j = 1 To 7
  28.                                 ArrR(j, K) = Arr(D(Arr(n)(i, 1))(0))(D(Arr(n)(i, 1))(1), j)
  29.                                 '分离出字典项目的标识位,并进行相应值的返回
  30.                             Next j
  31.                         End If
  32.                     Else
  33.                         D.Add Arr(n)(i, 1), Array(n, i, 0)
  34.                         '如果为新股东,则增加字典项目
  35.                     End If
  36.                 End If
  37.             Next i
  38.         End If
  39.     Next sn
  40.     With Sheets("汇总")
  41.         .UsedRange.Clear '清空已用区域
  42.         With .Range("a1").Resize(K, 7) '返回结果
  43.             .Value = Application.Transpose(ArrR)
  44.             .Sort Range("A1") '排序,股东信息聚合在一起返回
  45.         End With
  46.         .Range("a1").Select '返回到结果表
  47.     End With
  48.     Set D = Nothing '释放对象
  49. End Sub

2楼
kevinchengcw
来学习一下花花的帖子!

免责声明

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

评论列表
sitemap