财务当中或者是两个相同类型的表进行核对的时候,需要对工作表进行数据对比。
此项工作如果人工完成,可能有点困难,无论是对人的耐心还是对眼睛的长时间注视都提出不小的挑战。
当然了,Excel中也有一些方便的操作或以实现。
本节就以VBA为基础,进行一些编码,然后实现此类功能。
首先,对工作表对比进行一个流程演练。
本节主要针对两个表比对,三个以上不做考虑。
那么就要以两个表进行数据考虑,设置两个变量数组,把表内容保存到数组当中,然后,分别进行数组对比,这样做效率很高,最好不要进行单元格对比。
由于是不同的两个表,所以有可能一个表数据比另一个多。
那么就分别提取两个数组的上下标,这样把多出来数据的直接标识为不同。
两个数组比对使用两个循环进行。
下面看代码,自己分析一下。
上图为比对结果,带颜色的就是比对出不同数据的单元格。
比较使用了一个过程,如下:
Private Sub CheckString()
Dim S1 As Worksheet, S2 As Worksheet
Dim cArr(), s1Arr, s2Arr, ir1 As Long, ir2 As Long, ic1 As Long, ic2 As Long
Dim i As Long, c As Long, n As Long, ir As Long, ic As Long, ire As Long, ice As Long
cArr = Array(Sheets(1).Name, Sheets(2).Name)
ThisWorkbook.Worksheets(cArr).Select
Set S1 = ThisWorkbook.Worksheets(cArr(0))
Set S2 = ThisWorkbook.Worksheets(cArr(1))
S1.UsedRange.Interior.Color = RGB(251, 251, 251)
S2.UsedRange.Interior.Color = RGB(251, 251, 251)
s1Arr = S1.UsedRange
s2Arr = S2.UsedRange
ir1 = UBound(s1Arr, 1)
ic1 = UBound(s1Arr, 2)
ir2 = UBound(s2Arr, 1)
ic2 = UBound(s2Arr, 2)
If ir1 > ir2 Then
ir = ir2
ire = ir1 - ir2
Else
ir = ir1
ire = ir2 - ir1
End If
If ic1 > ic2 Then
ic = ic2
ice = ic1 - ic2
Else
ic = ic1
ice = ic2 - ic1
End If
For i = 1 To ir
For c = 1 To ic
If s1Arr(i, c) <> s2Arr(i, c) Then
S1.Cells(i, c).Interior.Color = RGB(222, 211, 112)
S2.Cells(i, c).Interior.Color = RGB(222, 211, 112)
n = n + 1
End If
Next c
Next i
For i = ir To ir + ire
For c = ic To ic + ice
n = n + 1
Next c
Next i
MsgBox "对比结束,一共找出:" & n & "处不同!", vbInformation, "提示"
End Sub
代码还是比较简单的,主要是循环比较不好理解,实际上逻辑也不难,就是两个数组进行比较。
数据不同就把相应的单元格设置颜色,相同就不做任何处理。
重点是要对二维数组有一个清晰的概念,要知道哪个单元格对应的数组维度,这样就很好理解代码了。
多学多练,自然就明白了。
联系客服