VBA二次学习笔记(2)——两个Excel表内容比较
2018-09-03 22:48
337 查看
说明(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(1) Set wb2 = Workbooks("2.xlsx").Sheets(1) Set wb = Workbooks("test.xlsm").Sheets(1) Dim n As Integer n = 2 For i = 3 To 14 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 + 1 End If Next For i = 24 To 31 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 + 1 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(1) Set sheetAnswer = Workbooks.Open(ThisWorkbook.path + "\" + fileAnswer).Sheets(1) Set sheetError = Workbooks(fileAnswer).Sheets(2) Dim n As Integer n = 2 For i = 3 To 5 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 + 1 End If Next For i = 9 To 61 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 + 1 End If Next For i = 66 To 107 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 + 1 End If Next Workbooks(fileCheck).Close Workbooks(fileAnswer).Close (True) End Sub
修改后:
Sub Check() Dim sheetCheck, sheetAnswer, sheetError As Worksheet '筛选、获取trainee文件名 For i = 1 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(1) Exit For End If Next Set sheetAnswer = Workbooks("Correct Answer.xlsx").Sheets(1) '获取Answer工作表 Set sheetError = Workbooks("Correct Answer.xlsx").Sheets(2) '获取Error工作表 '对比前清除Error比对记录 Dim m As Integer m = sheetError.UsedRange.Rows.Count sheetError.Rows("2:" & m).ClearContents '设置Error里的行号 Dim n As Integer n = 2 '循环对比 For i = 3 To 5 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 + 1 End If Next For i = 9 To 107 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 + 1 End If Next End Sub
相关文章推荐
- Java学习笔记33. 比较两个数组是否相等 Arrays.equals(A,B)方法
- C++学习笔记(五):auto和decltype两个比较神奇的定义变量方法
- 日常学习笔记,内容比较混乱……
- Ferris教程学习笔记:js示例3.4输入两个数字,比较大小
- C语言学习笔记frist---输入两个数比较大小
- jquery 学习笔记0 这个笔记是在工作中看到的。比较杂
- ContentProvider内容提供器学习笔记
- 【OpenCV学习笔记】【函数学习】十二(cvCanny()函数及其阈值设置的比较)
- 《跟老男孩学习Linux运维:Shell编程实战》之比较两个整数的大小
- [每日一学]MFC学习笔记——线程中控制窗口内容
- Linux学习笔记----文件处理命令--cat ==显示文件内容
- Linux c编程一站式学习笔记(05), 两个程序对比Continue和Break
- MFC学习笔记--静态编辑框内容获取和输出两种方式
- C# OpenCV学习笔记七之图片相似比较
- iOS 学习笔记18 时间比较
- MXNet设计笔记之:深度学习的编程模式比较
- 目录下文件遍历及txt内容获取学习笔记
- python学习笔记(1)--《python基础教程》第1章内容总结
- SilverLight商业应用程序开发---学习笔记(9)从摘要信息跳转到详细信息 导航到细节视图 在弹出窗体打开细节视图 使用DataGrid控件的行细节显示特性显示细节内容 主/从视图的实现
- php学习笔记---PHP生成二维码名片,并把名片内容添加到联系人中