ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何比较两个工作簿对应工作表对应项目的变动信息?

如何比较两个工作簿对应工作表对应项目的变动信息?

作者:绿色风 分类: 时间:2022-08-17 浏览:148
楼主
liuguansky
Q:如何比较两个工作簿对应工作表对应项目的变动信息?

一个工作簿代表一个月的数据,每个工作簿里有多个企业工作表,每一个企业工作表又有多个项目,现在的问题是如何返回两个工作簿对应工作表的对应项目的变化情况。
A:用如下代码可以实现:
  1. Sub justtest()
  2.     Dim arr1(1 To 3) As New dictionary, arr2(1 To 3) As New dictionary
  3.     Dim i&, j&, k%, pa$, str1$, arrt
  4.     pa = ThisWorkbook.Path
  5.     Application.ScreenUpdating = False
  6.     Application.DisplayAlerts = False
  7.     On Error Resume Next
  8.     Workbooks.Open pa & "\11.xls"
  9.     With Workbooks(1)
  10.         For i = 1 To 4
  11.             With .Sheets(i)
  12.                 str1 = .Name
  13.                 arr = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(3).Row - 1, 3)
  14.                 For j = 2 To UBound(arr, 1)
  15.                     For k = 1 To 3
  16.                        If arr(j, k) <> "" Then arr1(k)(arr(j, k)) = ""
  17.                 Next k, j
  18.                 With Workbooks(2).Worksheets(str1)
  19.                     arr = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(3).Row - 1, 3)
  20.                     For j = 2 To UBound(arr, 1)
  21.                         For k = 1 To 3
  22.                             If arr(j, k) <> "" Then arr2(k)(arr(j, k)) = ""
  23.                     Next k, j
  24.                 End With
  25.             End With
  26.             If i = 1 Then
  27.                 .Sheets("结果返回").Delete
  28.                 .Sheets.Add after:=.Worksheets(.Sheets.Count)
  29.                 .ActiveSheet.Name = "结果返回"
  30.                 Else: .Sheets("结果返回").Activate
  31.             End If
  32.             With .ActiveSheet
  33.                 j = i * 3 - 2
  34.                 .Cells(1, j) = str1 & "本月有上月没有的项目"
  35.                 .Cells(2, j).Resize(1, 3) = Application.Index(arr, 1)
  36.                 For k = 1 To 3
  37.                     arrt = st(arr1(k), arr2(k))
  38.                     .Cells(3, j + k - 1).Resize(UBound(arrt) + 1, 1) = Application.Transpose(arrt)
  39.                 Next k
  40.             End With
  41.         Next i
  42.     End With
  43.     Workbooks(2).Close False
  44.     Application.DisplayAlerts = True
  45.     Application.ScreenUpdating = True
  46. End Sub
  47. Function st(ar, ad)
  48.     Dim k
  49.     For Each k In ad.Keys
  50.         If ar.Exists(k) Then ar.Remove k
  51.     Next k
  52.     st = ar.Keys
  53. End Function

具体示例文件如下:
2楼
绿篱
跟着睡神学E功

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap