excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 两表格区域数据比较

本文于2023年8月28日首发于本人同名其他平台,更多文章案例请搜索关注!

内容提要

  • InputBox选择区域

  • 两个区域大小比较

  • 两个区域单元格比较、标色

大家好,我是冷水泡茶,今天有位粉丝朋友留言咨询:怎么核对两组数据的不同

他的数据表是这样的,分为三块,要求以第一块为基准,分别与下面两块数据进行比较,标出不同的单元格,在这个数据区域下面的区域中,对应填写相同或异常,并把异常数据标上黄底红字:

核对数据,对我们来说,那是经常有的事,但基本就是把两个区域比较一下:

1、如果是数字,我们可以用减法,在另一块空白区域,或者另一个工作表中相同位置,把两个区域的单元格相减,检查比较结果不等于0的,就是有差异。

2、如果是文本,我们可以用“=”的方法,得到“True”或者“False”的值,如果这样看得不是很清楚,我们可以再用一个IF函数,把TRUE变成0,False变成1,我们选中结果区域,如果状态栏汇总结果为0,则表明没有不同的单元格。

然而,有些人就是觉得VBA好,我一想,也行啊,我们可以选择两个区域,执行一段比较代码,把不同的单元格标上颜色,这样比较干净利落,不用多余的比较区域。代码不复杂,我们一起来看一下:

基本思路

1、通过InputBox,由用户自己选择两个区域,进行比较,要求这两个区域行列数据一致。

2、循环行、列,把两个区域对应行、列的单元格的值进行比较,如果不相等,则给其标色。

3、当然,也许有人希望一键比较,但由于数据放在一张表上,不太方便界定比较区域(不是不可以,就是有点烦,而且没有通用性),就设计成用户自行选择比较区域。

程序代码

1、模块1,CompareRanges过程,比较区域:

Sub CompareRanges()    Dim range1 As Range    Dim range2 As Range    Dim range3 As Range    Dim lastRow As Integer    Dim lastCol As Integer    On Error Resume Next    Set range1 = Application.InputBox("选择第一个比较区域:", Type:=8)    If range1 Is Nothing Then        MsgBox "没有正确选择第一个比较区域!"        Exit Sub    End If    lastRow = range1.Rows.Count    lastCol = range1.Columns.Count    Set range2 = Application.InputBox("选择第二个比较区域,可以选择左上第一个单元格:", Type:=8)    If range2 Is Nothing Then        MsgBox "没有正确选择第二个比较区域!"        Exit Sub    ElseIf range2.Rows.Count = 1 And range2.Columns.Count = 1 Then        Set range2 = range2.Resize(lastRow, lastCol)    ElseIf range1.Rows.Count <> range2.Rows.Count Or range1.Columns.Count <> range2.Columns.Count Then        MsgBox "两个区域大小不同,不能比较!"        Exit Sub    End If    Set range3 = Application.InputBox("选择结果区域,可以选择左上第一个单元格:", Type:=8)    If range3 Is Nothing Then        MsgBox "没有选择结果保存区域!"    ElseIf range3.Rows.Count = 1 And range3.Columns.Count = 1 Then        Set range3 = range3.Resize(lastRow, lastCol)        range3.Clear        range3.Font.Size = 9    ElseIf range1.Rows.Count <> range3.Rows.Count Or range1.Columns.Count <> range3.Columns.Count Then        MsgBox "结果区域大小不同,不能比较!"        Exit Sub    Else        range3.Clear        range3.Font.Size = 9    End If    range1.Interior.Color = xlNone    range1.Font.Color = vbBlack    range2.Interior.Color = xlNone    range2.Font.Color = vbBlack    For i = 1 To lastRow        For j = 1 To lastCol            Value1 = CStr(Format(range1.Cells(i, j).Value, "Standard"))            Value2 = CStr(Format(range2.Cells(i, j).Value, "Standard"))            If range3 Is Nothing Then                If Value1 <> Value2 Then                    range1.Cells(i, j).Interior.Color = RGB(255, 250, 205)                    range2.Cells(i, j).Interior.Color = RGB(255, 255, 0)                    range2.Cells(i, j).Font.Color = vbRed                End If            Else                If Value1 <> Value2 Then                    range1.Cells(i, j).Interior.Color = RGB(255, 250, 205)                    range2.Cells(i, j).Interior.Color = RGB(255, 250, 205)                    With range3                        .Cells(i, j).Value = "异常"                        .Cells(i, j).Interior.Color = RGB(255, 255, 0)                        .Cells(i, j).Font.Color = vbRed                    End With                Else                    range3.Cells(i, j).Value = "相同"                End If            End If        Next    NextEnd Sub

代码解析:

(1)定义3个Range对象。

(2)line8~12,选择输入第一个比较区域,使用Application.InputBox 方法,参数Type:=8,表示Range 对象形式的单元格引用。如果点取消则退出过程。

(3)line13~14,取得range1的行列数。

(4)line15~24,选择输入第二个比较区域,可以选择完整大小的区域,也可以点选区域左上一个单元格,比较区域根据range1的行列扩展。

(5)line25~38,选择输入结果保存区域,这步要谨慎,防止误操作把有用的数据给覆盖掉。

(6)line39~42,恢复range1,range2的字体与背景色。

(7)line43~67,循环整个区域,把对应两个区域的单元格值进行比较,这里把所有值都转成string。如果选择了结果保存区域,则把结果保存,如果没有选,则把两个比较区域对应的值不同的单元格标色。

2、其他过程:CmdCompareRanges,区域比较命令按钮

Private Sub CmdCompareRanges_Click()    Call CompareRangesEnd Sub

Tips

1、InputBox接收用户输入的方法。

2、区域扩展方法,resize。

3、单元格格式设置,背景色、字体等。

......

~~~~~~End~~~~~~

喜欢就点个、点在看留个言呗!分享一下更给力!感谢!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接