VBA二次学习笔记(2)——两个Excel表内容比较

摘要:
注:1.有两个格式相同的Excel文件,一个是正确答案,另一个是员工的答案。按代码比较两个文件并列出差异。正文:子测试1()Dimwb1AsWorksheetDimwb2AsWorksheetDimwbAsWorksheetSetwb1=工作簿.SheetsSetwb2=Workbooks.SheetsSetwb=工作簿.SheetSimnAsIntegern=2Fori=3To14FWb1.Range.Valuewb2.范围.ValueThenwb.Range.Value=wb1.范围.Valuewb.Lange.Value=wb1.范围.VValuewb.Range.VValuen=n+1EndIfNextFori=24To31Ifw1.Range.V值wb2.Range.VValueThenwb.Range值=wb2.范围1.范围.Valuewb.Range.Value=wb1.Range.Valuewb。R Ange公司。值=wb2.范围。值n=n+1EndIfNextEndSub效果:1.xlsx和2.xlsx。Excel中显示了宏文件所在的两个不同的数字。总结:1.获取工作簿的方法主要使用WorkBook();使用两个for循环,因为表是不连续的;变量n用于控制主表中不同数据的向下排列。

说明(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,有两个数字不一样

VBA二次学习笔记(2)——两个Excel表内容比较第1张      VBA二次学习笔记(2)——两个Excel表内容比较第2张

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

VBA二次学习笔记(2)——两个Excel表内容比较第3张

总结:

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

免责声明:文章转载自《VBA二次学习笔记(2)——两个Excel表内容比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇001.TypeScript简介.md开发板Ping不通虚拟机和主机下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板

原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板 一、主要实现以下功能:1、用鼠标选择单元格(可谓连续单元格,也可为不连续的)后,按照要求格式“证件号码:+选定内容+“,”+”选定内容“等等进行合并2、合并后的内容,直接复制到剪切板二、代码示例: SubTestA() Set a = NewDataObject '情况存放合并结果的单...

窗体和控件(2)——Excel之VBA(13)

二、窗体 1. 使用窗体 窗体的常用属性和方法(UserForm): 窗体常用属性 Enabled 可用性 Caption 标题 Visible 可见性 ShowModal 显示模式 窗体常用方法 Show 显示 Hide 隐藏 窗体常用事件 UserForm_Activate 激活 UserForm_QueryClose 退出   2....

【VBA编程】15.WorkSheet对象常用属性

【Cells属性】 Cells属性用于返回一个Range对象,表示工作表中所有的单元格,包括已经使用的单元格和未使用的单元格。 【代码区域】 Sub使用Cells属性() '声明变量 Dim wk AsWorkbook Dim wt AsWorksheet '赋值 Set wk = Application....

VBA 如何实现让所有图片刚好适应所在单元格大小与表框

Excel疑难千寻千解丛书(三)Excel2010 VBA编程与实践.pdf Sub 让图片适应单元格() Dim sh As Shape Dim sSheet As Worksheet '源工作表 Set sSheet = Worksheets("Sheet1") For Each sh In sSheet.S...

VBA中的函数Timer用法

第1.40例 Timer 函数一、题目:要求编写一段代码,运用 Timer 函数来计算本代码运行所化的时间。二、代码:Sub 示例_1_040()Dim t, i&, at = TimerFor i = 1 To 1000000a = a + iNext iMsgBox Timer - t & "秒" ‘返回0.046875秒End Sub...

Vba实现解析json数据。当中的关于Set oSC = CreateObject("MSScriptControl.ScriptControl") 不能创建对象的问题。

这几天在word里面写宏,想解析服务器传过来的json串。但是Set oSC = CreateObjectx86("MSScriptControl.ScriptControl")这个方法一直创建不了对象。 最后再网上看到说,word分为32位的和64位的这个方法只有在32位的word里面才可以使用,在64位的里面是实现不了的(不能创建对象) 于是在网上找各...