嗨,我在 Excel 中有一个疑问,如何比较 Excel 中的两个工作表并显示汇总结果,如果有任何值存在差异,则显示工作表名称
sheet1: eid | name |sal
1 | ab |100
2 |de |300
Sheet2: eid|name |sal
1 |ab |100
2 |ra |300
3 |df |400
基于以上2张 需要汇总报告:sheet1 count 2 Sheet2 计数 3 de 存在于sheet1 中,不存在于sheet2 中 id 3行存在于sheet2中但不存在于sheet1中
您能告诉我如何编写 VBA 脚本来在 Excel 中完成此任务吗?
Option Explicit
Sub Demo()
Dim objDic1 As Object, objDic2 As Object, rngData As Range
Dim i As Long, sKey, aKey
Dim arrData
Dim iR As Long: iR = 0
Set objDic1 = CreateObject("scripting.dictionary")
Set objDic2 = CreateObject("scripting.dictionary")
' Load data from Sheet1
Set rngData = Sheets("Sheet1").Range("A1").CurrentRegion
arrData = rngData.Value
For i = LBound(arrData) + 1 To UBound(arrData)
sKey = arrData(i, 1) & "|" & arrData(i, 2) & "|" & arrData(i, 3)
objDic1(sKey) = ""
Next i
' Load data from Sheet2
Set rngData = Sheets("Sheet2").Range("A1").CurrentRegion
arrData = rngData.Value
For i = LBound(arrData) + 1 To UBound(arrData)
sKey = arrData(i, 1) & "|" & arrData(i, 2) & "|" & arrData(i, 3)
objDic2(sKey) = ""
Next i
ReDim arrRes(objDic1.Count + objDic2.Count + 3, UBound(arrData, 2))
arrRes(0, 0) = "eid"
arrRes(0, 1) = "name"
arrRes(0, 2) = "sal"
arrRes(0, 3) = "Note"
' Comparing data
For Each sKey In objDic1.keys
If Not objDic2.exists(sKey) Then
aKey = Split(sKey, "|")
iR = iR + 1
For i = 0 To UBound(aKey)
arrRes(iR, i) = aKey(i)
Next
arrRes(iR, 3) = "Not in Sheet2"
End If
Next
For Each sKey In objDic2.keys
If Not objDic1.exists(sKey) Then
aKey = Split(sKey, "|")
iR = iR + 1
For i = 0 To UBound(aKey)
arrRes(iR, i) = aKey(i)
Next
arrRes(iR, 3) = "Not in Sheet1"
End If
Next
' Row count for each sheet
arrRes(iR + 2, 0) = "SheetName"
arrRes(iR + 2, 1) = "RowCount"
arrRes(iR + 3, 0) = "Sheet1"
arrRes(iR + 3, 1) = objDic1.Count
arrRes(iR + 4, 0) = "Sheet2"
arrRes(iR + 4, 1) = objDic2.Count
' Write output to sheet
Sheets.Add
Range("A1").Resize(iR + 5, 4).Value = arrRes
End Sub