https://jingyan.baidu.com/article/63f236281f17650208ab3d97.html

Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '员工基础报表数据范围
For j = 2 To 2028 '员工待遇统计表数据范围
If Sheets("old").Cells(i, 6) = Sheets("new").Cells(j, 6) Then
Sheets("old").Cells(i, 8) = "已存在" '存在时进行标记
End If
Next j
Next i
End Sub

前面插入一列"Index"序号

Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '员工基础报表数据范围
For j = 2 To 2028 '员工待遇统计表数据范围
If Sheets("old").Cells(i, 7) = Sheets("new").Cells(j, 7) Then
Sheets("old").Cells(i, 11) = "已存在" '存在时进行标记
Sheets("new").Cells(j, 11) = "源表已存在" '存在时进行标记 Sheets("old").Cells(i, 12) = i
Sheets("new").Cells(j, 12) = i
End If
Next j
Next i
End Sub

双重过滤,才能精准

Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '员工基础报表数据范围
For j = 2 To 2028 '员工待遇统计表数据范围
If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If Sheets("old").Cells(i, 7) = Sheets("new").Cells(j, 7) Then
Sheets("old").Cells(i, 11) = "已存在" '存在时进行标记
Sheets("new").Cells(j, 11) = "源表已存在" '存在时进行标记 Sheets("old").Cells(i, 12) = i
Sheets("new").Cells(j, 12) = i
End If
End If
Next j
Next i
End Sub

成功匹配:

Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '员工基础报表数据范围
For j = 2 To 2028 '员工待遇统计表数据范围
If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If Sheets("old").Cells(i, 7) = Sheets("new").Cells(j, 7) Then
Sheets("old").Cells(i, 11) = "已存在" '存在时进行标记
Sheets("new").Cells(j, 11) = "源表已存在" '存在时进行标记 Sheets("old").Cells(i, 12) = i
Sheets("new").Cells(j, 12) = i
End If
End If
Next j
Next i
End Sub

数值填充(大小写、双引号不能模糊匹配,需要改善)

Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '源表
For j = To 'overlay表
'If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If Sheets("old").Cells(i, ) = Sheets("new").Cells(j, ) Then
Sheets("old").Cells(i, ) = Sheets("new").Cells(j, ).Value '存在时进行标记
End If
'End If
Next j
Next i
End Sub

改善后代码:

Option Compare Text
Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '源表
For j = To 'overlay表
'If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If StrComp(Sheets("old").Cells(i, ).Value, Sheets("new").Cells(j, ).Value, ) = Then
Sheets("old").Cells(i, ) = Sheets("new").Cells(j, ).Value '存在时进行标记
End If
'End If
Next j
Next i
End Sub

或添加"Trim"函数过滤外侧空格

Option Compare Text
Sub 数据对比()
Dim i As Integer
Dim j As Integer
For i = To '源表
For j = To 'overlay表
'If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If StrComp(Trim(Sheets("old").Cells(i, ).Value), Trim(Sheets("new").Cells(j, ).Value), ) = Then
Sheets("old").Cells(i, ) = Sheets("new").Cells(j, ).Value '存在时进行标记
End If
'End If
Next j
Next i
End Sub

再次改善代码,自动获取最后一行的长度

Option Compare Text
Sub 数据对比()
Dim sLength As Integer '记录源表长度
Dim dLength As Integer '记录目标表长度
Dim i As Integer
Dim j As Integer
sLength = Sheets("old").Cells(Rows.Count, "A").End(xlUp).Row
dLength = Sheets("new").Cells(Rows.Count, "A").End(xlUp).Row
Debug.Print "source sheet length:" & sLength
Debug.Print "dir sheet length:" & dLength For i = To sLength
For j = To dLength
'If Sheets("old").Cells(i, 4) = Sheets("new").Cells(j, 4) Then
If StrComp(Trim(Sheets("old").Cells(i, ).Value), Trim(Sheets("new").Cells(j, ).Value), ) = Then
Sheets("old").Cells(i, ) = Sheets("new").Cells(j, ).Value '存在时进行标记
End If
'End If
Next j
Next i End Sub

再次改善:声明工作表引用类型

Option Explicit
Option Compare Text
Sub 数据匹配导入()
'声明语句
Dim i As Integer
Dim j As Integer
Dim sLength As Integer '源工作表长度
Dim dLength As Integer '目标工作表长度
Dim sSheet As Sheet1 '源工作表
Dim dSheet As Sheet2 '目标工作表 '赋值语句
'Set sSheet = Sheets("old") 'old是源工作表的名称
'Set dSheet = Sheets("new") 'new是目标工作表的名称
Set sSheet = Sheets() '第一个工作表
Set dSheet = Sheets() '第二个工作表 '获取工作表总列数
sLength = sSheet.Cells(Rows.Count, "A").End(xlUp).Row
dLength = dSheet.Cells(Rows.Count, "A").End(xlUp).Row '打印总列数
Debug.Print "source sheet length:" & sLength
Debug.Print "dir sheet length:" & dLength Application.ScreenUpdating = False '关闭屏幕更新
For i = To sLength '第一行是标题行
For j = To dLength
If StrComp(Trim(sSheet.Cells(i, ).Value), Trim(dSheet.Cells(j, ).Value), ) = Then
sSheet.Cells(i, ) = dSheet.Cells(j, ).Value '将目标工作表的第二列赋值到源工作表的第二列
End If
Next j
Next i
Application.ScreenUpdating = True '重新开启屏幕更新 '数据匹配完成后弹出提醒
MsgBox "匹配完成!"
End Sub

Excel如何实现两个工作表数据的对比的更多相关文章

  1. Excel中如何在两个工作表中查找重复数据

    有时我们可能会在两种工作表中查找重复记录,当数据记录很多时,就必须通过简单的方法来实现.下面小编就与大家一起分享一下查看重复记录数据的方法,希望对大家有所帮助. 方法/步骤   为了讲解的需要,小编特 ...

  2. excel怎么并排查看两个工作表

    excel怎么并排查看两个工作表 excel怎么并排查看两个工作表?excel打开一个窗口想要同时查看两个工作表中的数据,类似于word中的分栏效果,该怎么实现呢?EXCEL是一个使用最多的办公软件, ...

  3. 我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为: sheet1 sheet1$ sheet2 sheet2$

    原帖地址:http://bbs.csdn.net/topics/310230098 ---------------------------------------------------------- ...

  4. EXCEL 如何将多个工作表或工作簿合并到一个工作表

    在使用Excel 时,我们经常需要将多个工作表或工作簿合并到一个工作表中,这样我们就能快速地对数据进行分析和统计.对于一般用户而言,除了复制每个工作表后再粘贴,没有其他什么方法了.如果只是合并少数几个 ...

  5. RDLC 微软报表 导出Excel时产生多个工作表 (worksheet)

    . I have added two obejcts data source to Report Viewer. 2. in RDLC i have created two tables and in ...

  6. 【Office】【Excel】将多个工作表合为一个工作表

    在工作表中按下alt+F11打开vba编辑窗口,在菜单栏中选择[插入]=>[模板],将下面的代码粘贴过去,然后运行即可 点击查看代码 Sub 合并当前工作簿下的所有工作表() On Error ...

  7. 20161212xlVBA工作表数据整理合并单元格

    Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...

  8. 20161208xlVBA工作表数据导入Access

    Sub InsertToDataBase() Dim DataPath As String Dim SQL As String Const DataName As String = "yun ...

  9. excel表格中关于 撤销工作表保护密码

    利用宏处理,代码如下: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m A ...

随机推荐

  1. c#单元测试:使用Moq框架Mock对象

    在.net中有几种mock框架可供选择,比如NMock,PhinoMocks,FakeItEasy和Moq.尽管Moq相对较新,但是它非常易用.不需要像传统的Record/Replay.并且使用Moq ...

  2. Hive总结(八)Hive数据导出三种方式

    今天我们再谈谈Hive中的三种不同的数据导出方式. 依据导出的地方不一样,将这些方式分为三种: (1).导出到本地文件系统. (2).导出到HDFS中: (3).导出到Hive的还有一个表中. 为了避 ...

  3. vs2010编译错误(报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏)

    报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 1> 这段时间忙于看文献,没用过VS了. 今天用着用着就报错了: LINK : fat ...

  4. Android APK 打包过程 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 推荐10本C#编程的最佳书籍

    C#和.NET非常受全球开发人员的追捧和热爱.书籍是人类进步的阶梯.想要学习C# ?这里有10本学习C#编程的最好书籍在等着你哦. 1.<C# 5.0 in a Nutshell>:权威的 ...

  6. Swift学习笔记(十四)——字符,常量字符串与变量字符串

    在学习Java过程中,字符串碰到过String和StringBuffer,当中前者是不可变的,不能对字符串进行改动:后者是可变的,能够不断改动. 来到Swift中,对字符串的定义变的更加简单. (1) ...

  7. TCMalloc小记(转)

    一. 原理 tcmalloc就是一个内存分配器,管理堆内存,主要影响malloc和free,用于降低频繁分配.释放内存造成的性能损耗,并且有效地控制内存碎片.glibc中的内存分配器是ptmalloc ...

  8. 周期同步位置模式(CSP),轮廓位置模式(PPM),位置模式(PM)

    什么是运动控制? 运动控制就是通过机械传动装置对运动部件的位置.速度进行实时的控制管理,使运动部件按照预期的轨迹和规定的运动参数(如速度.加速度参数等)完成相应的动作. 运动控制系统的典型构成 1. ...

  9. [BetterExplained]书写是为了更好的思考

    我经常在走路和睡前总结所学过的内容,思考遗留的问题,一段时间的阅读和思考之后,一个总体的知识框架就会逐渐浮现在脑海中.然后我会将它书写下来,然而,我往往非常惊讶地发现,当我书写的时候,新的内容仍然源源 ...

  10. Swift 计算三角形角度、两条边夹角

    /// 计算三点之间的角度 /// /// - Parameters: /// - p1: 点1 /// - p2: 点2(也是角度所在点) /// - p3: 点3 /// - Returns: 角 ...