Excel如何实现两个工作表数据的对比
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如何实现两个工作表数据的对比的更多相关文章
- Excel中如何在两个工作表中查找重复数据
有时我们可能会在两种工作表中查找重复记录,当数据记录很多时,就必须通过简单的方法来实现.下面小编就与大家一起分享一下查看重复记录数据的方法,希望对大家有所帮助. 方法/步骤 为了讲解的需要,小编特 ...
- excel怎么并排查看两个工作表
excel怎么并排查看两个工作表 excel怎么并排查看两个工作表?excel打开一个窗口想要同时查看两个工作表中的数据,类似于word中的分栏效果,该怎么实现呢?EXCEL是一个使用最多的办公软件, ...
- 我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为: sheet1 sheet1$ sheet2 sheet2$
原帖地址:http://bbs.csdn.net/topics/310230098 ---------------------------------------------------------- ...
- EXCEL 如何将多个工作表或工作簿合并到一个工作表
在使用Excel 时,我们经常需要将多个工作表或工作簿合并到一个工作表中,这样我们就能快速地对数据进行分析和统计.对于一般用户而言,除了复制每个工作表后再粘贴,没有其他什么方法了.如果只是合并少数几个 ...
- RDLC 微软报表 导出Excel时产生多个工作表 (worksheet)
. I have added two obejcts data source to Report Viewer. 2. in RDLC i have created two tables and in ...
- 【Office】【Excel】将多个工作表合为一个工作表
在工作表中按下alt+F11打开vba编辑窗口,在菜单栏中选择[插入]=>[模板],将下面的代码粘贴过去,然后运行即可 点击查看代码 Sub 合并当前工作簿下的所有工作表() On Error ...
- 20161212xlVBA工作表数据整理合并单元格
Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...
- 20161208xlVBA工作表数据导入Access
Sub InsertToDataBase() Dim DataPath As String Dim SQL As String Const DataName As String = "yun ...
- excel表格中关于 撤销工作表保护密码
利用宏处理,代码如下: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m A ...
随机推荐
- java 线程池 使用实例
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- 几款流行的HTML5 UI 框架比较
手机HTML5开发,大部分都使用现有的框架,这里简单比较几个流行的UI 框架.作者(启明星工作室 http://www.dotnetcms.org) 比较一下几款流行的HTML5框架,个人意见,仅供参 ...
- SharedPreferences 原理 源码 进程间通信 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- .NET 并行编程——数据并行
本文内容 并行编程 数据并行 环境 计算 PI 矩阵相乘 把目录中的全部图片复制到另一个目录 列出指定目录中的所有文件,包括其子目录 最近,对多线程编程,并行编程,异步编程,这三个概念有点晕了,之前我 ...
- EditText自动换行显示内容
默认的EditText是不会自动换行的,通过代码来实现: [java] view plain copy EditText editText = new EditText(this); //设置Edit ...
- grid - 通过网格线号码来定位网格项目
网格线实际上是代表线的开始.结束. 两者之间就是网格列或行. 以下css仅对子元素生效 ,具体详情可以看后面示例 grid-row-start: 2; grid-row-end: 3; grid-co ...
- hive 字段名称显示
首先查看一个sql 1.首先存在一个数据表tmp CREATE TABLE tmp( platform string, channel string, chan_value string, uid s ...
- 【Java】MyBatis与Spring框架整合(二)
本文讲解 Spring 注入映射器及事务功能的实现. 注入映射器实现 MyBatis 可以使用 SqlSession 的 getMapper ( Class<T> type ) 方法,根据 ...
- MUI class="mui-switch" 开关监听
如何对MUI中的switch开关按钮进行监听, 页面代码如下: <form class="mui-input-group"> <ul class="mu ...
- 分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采集真实数据统计
一. 数据采集 源码GitHub地址 : -- SSH : git@github.com:han1202012/DisplayTest.git; -- HTTP : https://github.co ...