首页 Excel正文

年底对账神器。快速比对两个Excel表格。Excel表格VBA宏代码实现两个工作表内容的快速比对,找出差异项。

sanrenxing Excel 2021-12-30 973 0 | 文章出自:https://mp.weixin.qq.com/s?__biz=MzI5OTAwNjMzMg==&mid=2694958583&idx=1&sn=6b7da353c6e6546206711e11b489979c&chksm=c9c84de4febfc4f23b74f5e9c292efde193a8da15c838d2a8e0b42870643a99c10fdf53c9f4e&token=620065566&lang=zh_CN#rd 两张Excel表格快速比对

两个工作表快速比对

两个工作表比对找不同

    2021年即将翻页,无论好坏,对账和总结都是必须要做的。一说到对账,小明瞬间整个人就不好了,就在刚刚,他和小红两个人统计结果差上那么一丢丢,接下来就是要在上千条记录中找不同,熬夜加班是妥妥的。

    这次咱们就来分享个对账神器,是用VBA编写的宏代码,一键执行,实现差异项秒级查找,效果是这个样子的。

代码逻辑

    代码实现将差异结果写在“比对结果”工作表中,如果没有差异就给一片空白,处理逻辑如下:

1、因为只能两两工作表比对,所以第一步先判断当前工作簿中工作表数量是否为4个,默认对比前两个。

2、比对第一、二个工作表中单元格数量是否相同,如不同,打印出两个工作表的行列数。

3、逐个单元格比对,如不同,将单元格行、列数写入比对结果工作表中。

Sub compare()
Dim source_data_1(), source_data_2() '定义数组,存储工作表内容
Dim max_col, max_row
Dim sht, source_name_1, source_name_2 '定义工作表名称变量
Dim x, y
x = 2
y = 2
source_name_1 = Sheets(1).Name  '指定第一张工作表为源表1
source_name_2 = Sheets(2).Name   '指定第二张工作表为源表2
Worksheets("比对结果").Range("A2:XFD1048576").ClearContents  '清除上一次对比产生的历史记录

If Worksheets.Count() <> 4 Then
    MsgBox "当前工作簿内工作表数量不是4个,请调整!"
Else
    '提取工作表最大行、列
    sht = Worksheets(source_name_1).Activate
    source_data_1 = ActiveSheet.UsedRange.Value
    sht = Worksheets(source_name_2).Activate
    source_data_2 = ActiveSheet.UsedRange.Value
    max_row1 = UBound(source_data_1, 1)
    max_col1 = UBound(source_data_1, 2)
    max_row2 = UBound(source_data_2, 1)
    max_col2 = UBound(source_data_2, 2)

    '激活比对结果工作表
    sht = Worksheets("比对结果").Activate
    '如果两个工作表单元格数量相同,则进行比较,否则显示各自单元格数量
    If max_row1 = max_row2 And max_col1 = max_col2 Then
        '逐个单元格比对内容是否相同
        For i = 1 To max_row1
            For j = 1 To max_col1
            '如单元格内容不同,则将两个单元格数据写入比对结果工作表,结果列需要每次加2自增
                If source_data_1(i, j) <> source_data_2(i, j) Then
                    Cells(x, 1).Value = source_name_1 & "数据第" & i & "行第" & j & "列"
                    Cells(x, y).Value = source_data_1(i, j)
                    Cells(x + 1, 1).Value = source_name_2 & "数据第" & i & "行第" & j & "列"
                    Cells(x + 1, y).Value = source_data_2(i, j)
                    x = x + 2
                End If
            Next
        Next
        Else
        '打印两张源表的行列数
        Cells(2, 2).Value = "行数"
        Cells(2, 3).Value = "列数"
        Cells(3, 1).Value = source_name_1
        Cells(4, 1).Value = source_name_2
        Cells(3, 2).Value = max_row1
        Cells(4, 2).Value = max_row2
        Cells(3, 3).Value = max_col1
        Cells(4, 3).Value = max_col2
    End If
End If

End Sub



版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论