ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 运用VBA将把两个工作表中相同的公司名列出来

运用VBA将把两个工作表中相同的公司名列出来

作者:绿色风 分类: 时间:2022-08-18 浏览:88
楼主
xmyjk
Q:如何将sheet1和sheet2中,均出现的公司名称筛选至sheet3
原帖链接:http://www.exceltip.net/thread-24509-1-1.html


A:使用字典和数组方法处理,代码如下:
  1. Option Explicit

  2. Sub same()

  3. Dim i As Long, n As Long, arr, brr(), nm As Long
  4. Dim d

  5. Set d = CreateObject("Scripting.Dictionary")
  6. n = Worksheets(1).[b65536].End(xlUp).Row
  7. arr = Worksheets(1).Range("b2:b" & n)

  8. For i = 1 To UBound(arr)
  9.     d(arr(i, 1)) = ""
  10. Next

  11. Erase arr

  12. n = Worksheets(2).[b65536].End(xlUp).Row
  13. arr = Worksheets(2).Range("b2:b" & n)

  14. For i = 1 To UBound(arr)
  15.    If d.exists(arr(i, 1)) Then
  16.       nm = nm + 1
  17.       ReDim Preserve brr(1 To 1, 1 To nm)
  18.       brr(1, nm) = arr(i, 1)
  19.    End If
  20. Next

  21. Worksheets(3).Columns("a").Clear
  22. Worksheets(3).[a1].Resize(UBound(brr, 2), UBound(brr, 1)) = Application.Transpose(brr)
  23. Erase arr, brr
  24. Set d = Nothing
  25. End Sub

提取.rar
2楼
lixjun
xmyjk老师好!又来麻烦老师了!
附件里有精选出来的三个季度的股东数据。请老师写个查找相同股东的代码。想法是,任意两个表相比较,如果其中2个表的股东名称相同,且满足a列为个人股东(也就是股东名称不超过三个字)、e列为“新进”时,将其在各表中的整行添加到“汇总”表中(在汇总表里有个示范),方便对照查看。因为每个季度都增加一张新工作表。麻烦老师写个所有工作表循环对比的代码。有些繁琐,麻烦老师了!谢谢
股东.rar
3楼
liuguansky


  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.                     If D.exists(Arr(n)(i, 1)) Then
  12.                         Ar = D(Arr(n)(i, 1)): Ar(2) = Ar(2) + 1: D(Arr(n)(i, 1)) = Ar
  13.                         K = K + 1: ReDim Preserve ArrR(1 To 7, 1 To K)
  14.                         For j = 1 To 7
  15.                             ArrR(j, K) = Arr(n)(i, j)
  16.                         Next j
  17.                         If D(Arr(n)(i, 1))(2) = 1 Then
  18.                             K = K + 1: ReDim Preserve ArrR(1 To 7, 1 To K)
  19.                             For j = 1 To 7
  20.                                 ArrR(j, K) = Arr(D(Arr(n)(i, 1))(0))(D(Arr(n)(i, 1))(1), j)
  21.                             Next j
  22.                         End If
  23.                     Else
  24.                         D.Add Arr(n)(i, 1), Array(n, i, 0)
  25.                     End If
  26.                 End If
  27.             Next i
  28.         End If
  29.     Next sn
  30.     With Sheets("汇总")
  31.         .UsedRange.Clear
  32.         With .Range("a1").Resize(K, 7)
  33.             .Value = Application.Transpose(ArrR)
  34.             .Sort Range("A1")
  35.         End With
  36.         .Range("a1").Select
  37.     End With
  38.     Set D = Nothing
  39. End Sub


试试,是这样的效果吧?

股东.rar

有新问题,一般建议是重新发提问贴 。
4楼
lixjun
多谢斑竹!新人不太懂规矩,下回注意
5楼
lixjun
多谢liuguansky 老师!正是我需要的效果!再次感谢!顺祝二位老师中秋节快乐!
6楼
xmyjk
才注意到,谢谢花花排忧解难。
7楼
liuguansky


记得阿木版主写过一个字典来求交集,并集的例子的贴,你找找吧。
8楼
bluexuemei
学习,好贴!

免责声明

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

评论列表
sitemap