Excel精英培训网

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

[已解决]两个工作表的数据比对

[复制链接]
发表于 2016-5-12 21:10 | 显示全部楼层 |阅读模式
本帖最后由 cunfu2010 于 2016-5-13 10:00 编辑

表1与表2比对。如何实现:表1与表2所有完全相同的数据行自动将字体变成白色(即实现隐藏效果)并隐藏行,剩下两表比对后数据有差异的(比如说表2比表1多出来的1人的记录,或者同一人的某项社保数据有出入)记录行,用红色标记出来的。
最佳答案
2016-5-13 09:30
  1. Sub Macro1()
  2. Dim arr, brr, ar, d, d2, i&, j%
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Sheet1.Range("a1").CurrentRegion
  6. brr = Sheet2.Range("a1").CurrentRegion
  7. ReDim ar(1 To UBound(arr))
  8. For i = 2 To UBound(arr)
  9.     p = ""
  10.     For j = 1 To UBound(arr, 2)
  11.         p = p & "," & arr(i, j)
  12.     Next
  13.     ar(i) = p
  14.     d(p) = i
  15. Next
  16. Application.ScreenUpdating = False
  17. For i = 2 To UBound(brr)
  18.     p = ""
  19.     For j = 1 To UBound(brr, 2)
  20.         p = p & "," & brr(i, j)
  21.     Next
  22.     d2(p) = i
  23.     If Not d.Exists(p) Then
  24.         Sheet2.Cells(i, 1).Resize(1, UBound(brr, 2)).Font.ColorIndex = 3
  25.     Else
  26.         Sheet2.Rows(i).Hidden = True
  27.     End If
  28. Next
  29. For i = 2 To UBound(ar)
  30.     If Not d2.Exists(ar(i)) Then
  31.         Sheet1.Cells(i, 1).Resize(1, UBound(arr, 2)).Font.ColorIndex = 3
  32.     Else
  33.         Sheet1.Rows(i).Hidden = True
  34.     End If
  35. Next
  36. Application.ScreenUpdating = True
  37. End Sub
复制代码

两个工作表数据比对.rar

13.71 KB, 下载次数: 47

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-5-13 05:17 | 显示全部楼层
仅用红色标记
  1. Sub Macro1()
  2. Dim arr, brr, ar, d, d2, i&, j%
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Sheet1.Range("a1").CurrentRegion
  6. brr = Sheet2.Range("a1").CurrentRegion
  7. ReDim ar(1 To UBound(arr))
  8. For i = 2 To UBound(arr)
  9.     p = ""
  10.     For j = 1 To UBound(arr, 2)
  11.         p = p & "," & arr(i, j)
  12.     Next
  13.     ar(i) = p
  14.     d(p) = i
  15. Next
  16. For i = 2 To UBound(brr)
  17.     p = ""
  18.     For j = 1 To UBound(brr, 2)
  19.         p = p & "," & brr(i, j)
  20.     Next
  21.     d2(p) = i
  22.    If Not d.Exists(p) Then Sheet2.Cells(i, 1).Font.ColorIndex = 3
  23. Next
  24. For i = 2 To UBound(ar)
  25.     If Not d2.Exists(ar(i)) Then Sheet1.Cells(i, 1).Font.ColorIndex = 3
  26. Next
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-5-13 08:43 | 显示全部楼层
dsmch 发表于 2016-5-13 05:17
仅用红色标记

谢谢,标不是一个单元格,而是对应的整个行的非空单元格,并隐藏?
回复

使用道具 举报

 楼主| 发表于 2016-5-13 09:03 | 显示全部楼层
dsmch 发表于 2016-5-13 05:17
仅用红色标记

谢谢,标红的目标实现了,隐藏行还是不行
回复

使用道具 举报

发表于 2016-5-13 09:30 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, ar, d, d2, i&, j%
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Sheet1.Range("a1").CurrentRegion
  6. brr = Sheet2.Range("a1").CurrentRegion
  7. ReDim ar(1 To UBound(arr))
  8. For i = 2 To UBound(arr)
  9.     p = ""
  10.     For j = 1 To UBound(arr, 2)
  11.         p = p & "," & arr(i, j)
  12.     Next
  13.     ar(i) = p
  14.     d(p) = i
  15. Next
  16. Application.ScreenUpdating = False
  17. For i = 2 To UBound(brr)
  18.     p = ""
  19.     For j = 1 To UBound(brr, 2)
  20.         p = p & "," & brr(i, j)
  21.     Next
  22.     d2(p) = i
  23.     If Not d.Exists(p) Then
  24.         Sheet2.Cells(i, 1).Resize(1, UBound(brr, 2)).Font.ColorIndex = 3
  25.     Else
  26.         Sheet2.Rows(i).Hidden = True
  27.     End If
  28. Next
  29. For i = 2 To UBound(ar)
  30.     If Not d2.Exists(ar(i)) Then
  31.         Sheet1.Cells(i, 1).Resize(1, UBound(arr, 2)).Font.ColorIndex = 3
  32.     Else
  33.         Sheet1.Rows(i).Hidden = True
  34.     End If
  35. Next
  36. Application.ScreenUpdating = True
  37. End Sub
复制代码

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-5-13 09:58 | 显示全部楼层
dsmch 发表于 2016-5-13 09:30

谢谢,全部实现了。
回复

使用道具 举报

发表于 2016-5-14 12:07 | 显示全部楼层
学习一下。
回复

使用道具 举报

发表于 2016-5-14 22:28 | 显示全部楼层
学习一下谢谢
回复

使用道具 举报

 楼主| 发表于 2016-5-19 21:44 | 显示全部楼层
dsmch 发表于 2016-5-13 09:30

你好,如果是比对相同的,如何修改代码?我琢磨了几天了,不得其法,再帮帮忙,谢谢!!!

点评

用附件说明问题,建议另开新帖求助  发表于 2016-5-19 22:25
回复

使用道具 举报

 楼主| 发表于 2016-5-19 22:46 | 显示全部楼层
dsmch 发表于 2016-5-13 09:30

还是这个问题的附件,下面是你给出的比对差异的代码,非常棒,但如何改正比对重复的,即比对相同的,我琢磨了几天了,不行,麻烦你给看看,再发帖就是大同小异的帖子了。麻烦了,谢谢!!!


点评

用附件模拟一下结果  发表于 2016-5-19 22:54
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 20:22 , Processed in 0.470773 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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