VBA二次学习笔记(2)——两个Excel表内容比较
说明(2018-9-3 22:38:58):
1. 就是之前问同事要来的作业,有两个格式一样的Excel文件,一个是正确答案,一个是员工作答的。通过代码将两个文件进行比对,把不同之处列出来。
正文:
Sub test1()
Dim wb1 As Worksheet
Dim wb2 As Worksheet
Dim wb As Worksheet
Set wb1 = Workbooks("1.xlsx").Sheets()
Set wb2 = Workbooks("2.xlsx").Sheets()
Set wb = Workbooks("test.xlsm").Sheets()
Dim n As Integer
n =
For i = To
If wb1.Range("b" & i).Value <> wb2.Range("b" & i).Value Then
wb.Range("a" & n).Value = wb1.Range("a" & i).Value
wb.Range("b" & n).Value = wb1.Range("b" & i).Value
wb.Range("c" & n).Value = wb2.Range("b" & i).Value
n = n +
End If
Next For i = To
If wb1.Range("b" & i).Value <> wb2.Range("b" & i).Value Then
wb.Range("a" & n).Value = wb1.Range("a" & i).Value
wb.Range("b" & n).Value = wb1.Range("b" & i).Value
wb.Range("c" & n).Value = wb2.Range("b" & i).Value
n = n +
End If
Next
End Sub
效果:
1.xlsx和2.xlsx,有两个数字不一样

在宏文件所在的Excel里的显示结果:

总结:
1. 主要使用了获取工作簿的方法WorkBooks();用了两个for循环,因为表格不连续;用了一个变量n,控制在主表中向下排列不同数据。
2. WorkBooks()获取工作簿需要文件打开,下一步可以使用open方法,在不用提前打开文件的条件下完成操作。
附件:
Sub test1()
Dim wb1 As Worksheet
Dim wb2 As Worksheet
Dim wb As Worksheet
Dim fileCheck, fileAnswer As String
fileCheck = "Cassie Jiang.xlsx"
fileAnswer = "Correct Answer.xlsx"
'判断文件是否已经打开,如果打开,提示关闭
Set sheetCheck = Workbooks.Open(ThisWorkbook.path + "\" + fileCheck).Sheets()
Set sheetAnswer = Workbooks.Open(ThisWorkbook.path + "\" + fileAnswer).Sheets()
Set sheetError = Workbooks(fileAnswer).Sheets()
Dim n As Integer
n =
For i = To
If LCase(Replace(sheetCheck.Range("d" & i).Value, " ", "")) <> LCase(Replace(sheetAnswer.Range("d" & i).Value, " ", "")) Then
sheetError.Range("a" & n).Value = sheetCheck.Range("D6").Value '姓名
sheetError.Range("b" & n).Value = sheetCheck.Range("b" & i).Row 'Row#
sheetError.Range("c" & n).Value = sheetCheck.Range("b" & i).Value 'Item(b3,c3合并了,所以要用b3)
sheetError.Range("d" & n).Value = sheetCheck.Range("d" & i).Value 'Trainee's Answer
sheetError.Range("e" & n).Value = sheetAnswer.Range("d" & i).Value 'Correct Answer
n = n +
End If
Next For i = To
If LCase(Replace(sheetCheck.Range("d" & i).Value, " ", "")) <> LCase(Replace(sheetAnswer.Range("d" & i).Value, " ", "")) Then
sheetError.Range("a" & n).Value = sheetCheck.Range("D6").Value
sheetError.Range("b" & n).Value = sheetCheck.Range("b" & i).Row
sheetError.Range("c" & n).Value = sheetCheck.Range("c" & i).Value
sheetError.Range("d" & n).Value = sheetCheck.Range("d" & i).Value
sheetError.Range("e" & n).Value = sheetAnswer.Range("d" & i).Value
n = n +
End If
Next For i = To
If LCase(Replace(sheetCheck.Range("d" & i).Value, " ", "")) <> LCase(Replace(sheetAnswer.Range("d" & i).Value, " ", "")) Then
sheetError.Range("a" & n).Value = sheetCheck.Range("D6").Value
sheetError.Range("b" & n).Value = sheetCheck.Range("b" & i).Row
sheetError.Range("c" & n).Value = sheetCheck.Range("c" & i).Value
sheetError.Range("d" & n).Value = sheetCheck.Range("d" & i).Value
sheetError.Range("e" & n).Value = sheetAnswer.Range("d" & i).Value
n = n +
End If
Next Workbooks(fileCheck).Close
Workbooks(fileAnswer).Close (True) End Sub
修改后:
Sub Check()
Dim sheetCheck, sheetAnswer, sheetError As Worksheet '筛选、获取trainee文件名
For i = To Workbooks.Count
If Workbooks(i).Name <> "Correct Answer.xlsx" And Workbooks(i).Name <> "micro.xlsm" And LCase(Workbooks(i).Name) <> "personal.xlsb" Then
Set sheetCheck = Workbooks(i).Sheets()
Exit For
End If
Next
Set sheetAnswer = Workbooks("Correct Answer.xlsx").Sheets() '获取Answer工作表
Set sheetError = Workbooks("Correct Answer.xlsx").Sheets() '获取Error工作表 '对比前清除Error比对记录
Dim m As Integer
m = sheetError.UsedRange.Rows.Count
sheetError.Rows("2:" & m).ClearContents '设置Error里的行号
Dim n As Integer
n = '循环对比
For i = To
If LCase(Replace(sheetCheck.Range("d" & i).Value, " ", "")) <> LCase(Replace(sheetAnswer.Range("d" & i).Value, " ", "")) Then
sheetError.Range("a" & n).Value = sheetCheck.Range("D6").Value '姓名
sheetError.Range("b" & n).Value = sheetCheck.Range("b" & i).Row 'Row#
sheetError.Range("c" & n).Value = sheetCheck.Range("b" & i).Value 'Item(b3,c3合并了,所以要用b3)
sheetError.Range("d" & n).Value = sheetCheck.Range("d" & i).Value 'Trainee's Answer
sheetError.Range("e" & n).Value = sheetAnswer.Range("d" & i).Value 'Correct Answer
n = n +
End If
Next For i = To
If LCase(Replace(sheetCheck.Range("d" & i).Value, " ", "")) <> LCase(Replace(sheetAnswer.Range("d" & i).Value, " ", "")) Then
sheetError.Range("a" & n).Value = sheetCheck.Range("D6").Value
sheetError.Range("b" & n).Value = sheetCheck.Range("b" & i).Row
sheetError.Range("c" & n).Value = sheetCheck.Range("c" & i).Value '这里是c了
sheetError.Range("d" & n).Value = sheetCheck.Range("d" & i).Value
sheetError.Range("e" & n).Value = sheetAnswer.Range("d" & i).Value
n = n +
End If
Next End Sub
VBA二次学习笔记(2)——两个Excel表内容比较的更多相关文章
- VBA二次学习笔记(1)——文件操作
说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...
- VBA二次学习笔记(3)——批量合并单元格
说明(2018-9-16 22:17:49): 1. 昨天运动会,100米八个人跑了第五,400米五个人跑了第三,得了个榨汁机.终于结束了哈哈哈!之前一个星期紧张的天天拉肚子,真是没出息..不过养成了 ...
- 毕业设计 之 二 PHP学习笔记(一)
毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表
vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...
- 从两张Excel表所想到的
从两张Excel表所想到的 前几日,客服妹子发过来几张表,让我给她做下匹配,然后做了,想了,便有了这篇博文,不由感慨,看似简简单单的两张Excel表其实藏着好多东西,记叙如下,与君共勉. 最初的需求: ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- 【web开发学习笔记】Structs2 Action学习笔记(两)
action学习笔记2-大约action method讨论 Action运行的时候并不一定要运行execute方法,能够在配置文件里配置Action的时候用method=来指定运行哪个方法 也能够在u ...
随机推荐
- 图的封装(C++)
一. 问题说明 1.问题的简单描述 将图和网的的创建和基本操作分封装到class 用来熟悉此种数据结构和基于这种数据结构上的基本算法 采用VS2010编译环境 2.工作安排 二. 源代码 1.文件st ...
- Java笔记(十七) 异步任务执行服务
异步任务执行服务 一.基本原理和概念 一)基本接口 1)Runnable和Callable:表示要执行的异步任务. 2)Executor和ExecutorService:表示执行服务. 3)Futur ...
- Android:PowerManager类 电源管理
PowerManager类用于对设备电源状态进行管理:PowerManager.WakeLock类用于保持设备常亮:Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现 ...
- php商品条件筛选功能你是怎么做出来的?
php商品条件筛选功能你是怎么做出来的? php按条件筛选商品的功能,还是比较简单的.其实就是根据不同的条件组成SQL查询条件,从数据库里查出不同的商品出来.举个例子:用户可以按价格范围.按品牌.按商 ...
- 树形动态规划(树形DP)入门问题—初探 & 训练
树形DP入门 poj 2342 Anniversary party 先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上 ...
- BZOJ2872 : 优莱卡
$A$类数据:直接输出$B[l]$,$O(n+m)$.$B$类数据:ST表求区间最小值,$O(n\log n+m)$.$C$类数据:可持久线段树求区间$k$小值,$O((n+m)\log n)$.剩下 ...
- C++程序设计方法3:default修饰符
编译器自动生成的成员函数 如果以下成员函数用户都没有为类实现,则编译器会自动为类生成他们的缺省的实现 默认构造函数,空函数,什么也不做 析构函数,空函数,什么也不做: 拷贝构造函数-按bit位复制对象 ...
- 3ds max学习笔记(五)--操作工具
一些快捷:移动,旋转,缩放右键可调整数据或者直接右键点开也可以看到或者快捷键W,E,R 复制物体:摁住shift+移动工具,往想要复制的位置拖拽(实例方式复制)亦可选择多个父对象
- js三种经典排序:冒泡排序、插入排序、快速排序
冒泡排序: function bubbleSort(arr){ for(var r=1;r<arr.length-1;r++){ for(var i=0;i<arr.length-r;i+ ...
- Linux命令第一篇
作业一: 1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” natasha:x:1004:555:master:/home/natasha:/bin/ba ...