ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: LangQueS

[VBA程序开发] ★工作表之间多列数据对比★

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-3 12:44 | 显示全部楼层
本帖最后由 LangQueS 于 2012-5-3 12:44 编辑
gzy001 发表于 2012-5-3 12:36
狼版你好,这个贴子做比对是挺好的,能不能做一个灵活的,让所有的人都能自己选择列数,比如你现在对比的是 ...


代码中包含灵活的设置。以下是代码前面的内容:

x = "表1"   '工作表1名称
y = "表2"   '工作表2名称
zz = 4    '需要对比的列数

这个代码使用率不高,可以在代码中灵活设置就可以了。

TA的精华主题

TA的得分主题

发表于 2012-5-3 20:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-5-4 11:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
无论如何也要学习一下~~~

TA的精华主题

TA的得分主题

发表于 2012-5-4 13:53 | 显示全部楼层
狼版,请看附件,不知能否实现,如能实现,这对要做比对来说那方便多了。辛苦了,谢谢。

工作表之间多列数据对比.zip

29.77 KB, 下载次数: 129

TA的精华主题

TA的得分主题

发表于 2012-5-5 16:09 | 显示全部楼层
LangQueS 发表于 2012-5-3 12:44
代码中包含灵活的设置。以下是代码前面的内容:

x = "表1"   '工作表1名称

版主,能否看一下上面的附件,能否做成,谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-5 17:28 | 显示全部楼层
gzy001 发表于 2012-5-5 16:09
版主,能否看一下上面的附件,能否做成,谢谢。

你的想法是好的,由于这个问题通用性不强,不是经常用到,实际引用时,只要将需要对比的几列放在表格的前面就可以了,不必制作复杂的代码。

TA的精华主题

TA的得分主题

发表于 2012-5-6 09:46 | 显示全部楼层
LangQueS 发表于 2012-5-5 17:28
你的想法是好的,由于这个问题通用性不强,不是经常用到,实际引用时,只要将需要对比的几列放在表格的前 ...

版主你好,一般来说,要比对的数据都是对方发过来的数据跟我们自己数据做比对,找出其中的错误所在,如把要比对的列从中又折出来的话,比对完了又不知是那个位置了,我现在做的比对是最原始的方法,一一做对比,在网上找不到适合我的,如我提的方案能实现的话,起码对我的帮助就大了,因我每月都要对账,又没法把它折出来对比,不折又对不了,所以烦请版主能否达到我的要求呢?谢谢了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-6 09:50 | 显示全部楼层
gzy001 发表于 2012-5-6 09:46
版主你好,一般来说,要比对的数据都是对方发过来的数据跟我们自己数据做比对,找出其中的错误所在,如把 ...

比对的列从中不用“折出来”,将要比对的几列放到前面就可以了,不会影响对应关系。

TA的精华主题

TA的得分主题

发表于 2012-5-6 10:52 | 显示全部楼层
LangQueS 发表于 2012-5-6 09:50
比对的列从中不用“折出来”,将要比对的几列放到前面就可以了,不会影响对应关系。

谢谢版主,那能不能把比对完有错的提取出来吗?如安我上面附件的想法是否不好实现,还是做起来特别的麻烦。多谢。

TA的精华主题

TA的得分主题

发表于 2012-5-6 14:54 | 显示全部楼层
  1. Sub yy()
  2. Dim Arr, i&, Myr&, Myc%, Arr2, Arr3, col%
  3. Dim d, k, t, m&, n1&, n2&, j&, zm$
  4. Set d = CreateObject("Scripting.Dictionary")
  5. Application.ScreenUpdating = False
  6. Sheet3.Activate
  7. [a6:s500].Clear
  8. zm = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  9. Myc = [iv2].End(xlToLeft).Column
  10. Arr3 = Range("a2").Resize(1, Myc)
  11. Arr = Sheet1.[a1].CurrentRegion
  12. For i = 2 To UBound(Arr)
  13.     If Arr(i, 1) <> "" Then d(Arr(i, 1)) = i
  14. Next
  15. Arr2 = Sheet2.[a1].CurrentRegion
  16. n1 = 5: n2 = 5
  17.     For i = 2 To UBound(Arr2)
  18.         If d.exists(Arr2(i, 1)) Then
  19.             m = d(Arr2(i, 1))
  20.             For j = 1 To UBound(Arr3, 2)
  21.                 col = InStr(zm, Arr3(1, j))
  22.                 If Arr2(m, col) <> Arr(m, col) Then
  23.                     n1 = n1 + 1
  24.                     Cells(n1, 1).Resize(1, UBound(Arr, 2)) = Application.Index(Arr, m, 0)
  25.                     n2 = n2 + 1
  26.                     Cells(n2, 11).Resize(1, UBound(Arr2, 2)) = Application.Index(Arr2, i, 0)
  27.                 End If
  28.             Next
  29.         ElseIf Arr2(i, 1) <> "" Then
  30.             n2 = n2 + 1
  31.             Cells(n2, 11).Resize(1, UBound(Arr2, 2)) = Application.Index(Arr2, i, 0)
  32.         End If
  33.     Next
  34.     [a6].Resize(n1 - 5, 9).Borders.LineStyle = 1
  35.     [k6].Resize(n2 - 5, 9).Borders.LineStyle = 1
  36.     Set d = Nothing
  37. Application.ScreenUpdating = True
  38. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 08:42 , Processed in 0.044125 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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