说明(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表内容比较的更多相关文章

  1. VBA二次学习笔记(1)——文件操作

    说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...

  2. VBA二次学习笔记(3)——批量合并单元格

    说明(2018-9-16 22:17:49): 1. 昨天运动会,100米八个人跑了第五,400米五个人跑了第三,得了个榨汁机.终于结束了哈哈哈!之前一个星期紧张的天天拉肚子,真是没出息..不过养成了 ...

  3. 毕业设计 之 二 PHP学习笔记(一)

    毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...

  4. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  5. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  6. vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表

    vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...

  7. 从两张Excel表所想到的

    从两张Excel表所想到的 前几日,客服妹子发过来几张表,让我给她做下匹配,然后做了,想了,便有了这篇博文,不由感慨,看似简简单单的两张Excel表其实藏着好多东西,记叙如下,与君共勉. 最初的需求: ...

  8. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  9. 【web开发学习笔记】Structs2 Action学习笔记(两)

    action学习笔记2-大约action method讨论 Action运行的时候并不一定要运行execute方法,能够在配置文件里配置Action的时候用method=来指定运行哪个方法 也能够在u ...

随机推荐

  1. FasterRCNN代码解读

    之前的文章简要介绍了Faster-RCNN等物体检测的算法,本文将从代码角度详细分析介绍Faster-RCNN的实现.本文使用的代码参考了chenyuntc的实现,代码的位置看这里.需要注意的是,本文 ...

  2. 7种方法实现移动端Retina屏幕1px边框效果

    在Reina(视网膜)屏幕的手机上,使用CSS设置的1px的边框实际会比视觉稿粗很多.在之前的项目中,UI告诉我说我们移动项目中的边框全部都变粗了,UI把他的设计稿跟我的屏幕截图跟我看,居然真的不一样 ...

  3. BZOJ.4910.[SDOI2017]苹果树(树形依赖背包 DP 单调队列)

    BZOJ 洛谷 \(shadowice\)已经把他的思路说的很清楚了,可以先看一下会更好理解? 这篇主要是对\(Claris\)题解的简单说明.与\(shadowice\)的做法还是有差异的(比如并没 ...

  4. 潭州课堂25班:Ph201805201 django 项目 第十七课 用户登录,登出实现 (课堂笔记)

    登录,校验: 1,判断用户名输入是否为空, 2,判断用户名密码是否匹配, 3,记住我的功能,:将用户信息记到 session 中 请求方式: POST 在视图中: # 1,创建类# 2,获取前台参数# ...

  5. [HNOI2017/AHOI2017]影魔

    Description: 奈文摩尔有 \(n\) 个灵魂,他们在影魔宽广的体内可以排成一排,从左至右标号 \(1\) 到 \(n\).第 \(i\) 个灵魂的战斗力为 \(k_i\),灵魂们以点对的形 ...

  6. BZOJ2240 : ural1676 Mortal Combat

    首先如果最大匹配不足$n$个那么显然每条边都不可能在匹配为$n$的方案中. 对于一条边$(u,v)$,如果它可能在最大匹配中,有两种情况: $1.(u,v)$是当前方案的匹配边. $2.$可以沿着$( ...

  7. Eclipse 设置Web测试的浏览器

    Window->Preferences->General->Web Browser->选择Use external web browser->选择Default syst ...

  8. 学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍

    1.Struts2的系统架构: 2.架构中不同Key的作用介绍: servlet Filters:过滤器链,client的全部请求都要经过Filter链的处理. Struts Core:Struts2 ...

  9. 【二分】Base Station Sites @ICPC2017HongKong/upcexam5559

    时间限制: 1 Sec 内存限制: 128 MB 5G is the proposed next telecommunications standards beyond the current 4G ...

  10. CSS学习之路,指定值,计算值,使用值。

    前面被问过这几个值得区别,没太研究,有点抠文字的感觉,既然到这儿了 ,就简答梳理下吧. 指定值(specified value):通过样式表样式规则定义的值:可以来自层叠样式表,如果没有指定,则考虑父 ...