excel比较并合并工作表
发布时间:2022-02-05 20:27:51
有两个工作表,均含有相同的数据,但最后一列名称和产品的数量不同,如下图1和图2所示。
图1
图2
现在需要将这两个工作表合并,保留最后一列且添加一列用来存放两个工作表最后一列数据之差,如下图3所示。
图3
这里使用VBA来解决。
由于我们要使用Dictionary对象,因此先要设置相应对象库的引用。首先,打开VBE编辑器,单击菜单“工具——引用”,找到并选取“Microsoft Scripting Runtime”前的复选框,如下图4所示。
图4
编写代码如下:
Sub CombineSheets()
‘声明变量
‘用于存储工作表Sheet1中的数据
Dim dic1 As Scripting.Dictionary
‘用于存储工作表Sheet2中的数据
Dim dic2 As Scripting.Dictionary
‘工作表Sheet1
Dim wks1 As Worksheet
‘工作表Sheet2
Dim wks2 As Worksheet
‘工作表Sheet3
Dim wks3 As Worksheet
‘工作表中数据的最后一行
Dim lngLastRow As Long
Dim i As Long
Dim j As Long
Dim var As Variant
‘入库数量
Dim dblImport As Double
‘出库数量
Dim dblExport As Double
Dim rng1 As Range
Dim rng2 As Range
‘赋值工作表对象
Set wks1 = Sheets(“Sheet1”)
Set wks2 = Sheets(“Sheet2”)
Set wks3 = Sheets(“Sheet3”)
‘初始化字典对象
Set dic1 = New Scripting.Dictionary
Set dic2 = New Scripting.Dictionary
‘填充字典dic1
lngLastRow = wks1.Range(“A” &Rows.Count).End(xlUp).Row
Set dic1 =DicData(wks1.Range(“A1:E” & lngLastRow), 2, True)
‘填充字典dic2
lngLastRow = wks2.Range(“A” &Rows.Count).End(xlUp).Row
Set dic2 = DicData(wks2.Range(“A1:E”& lngLastRow), 2, True)
‘将数据输入到工作表Sheet3
wks3.Rows(“2:” &Rows.Count).Clear
i = 1
‘遍历字典dic1
For Each var In dic1.Keys
dblImport = 0
‘取第5列中的入库数据并求和
For Each rng1 In dic1.Item(var).Rows
dblImport = dblImport +rng1.Cells(5)
Next rng1
‘输出数据到相应的单元格
i = i + 1
For Each rng2 Indic1.Item(var).Rows(1).Cells
wks3.Cells(i, rng2.Column) = rng2
Next rng2
wks3.Cells(i, 5) = dblImport
wks3.Cells(i, 1) = i – 1
Next var
For Each var In dic2.Keys
dblExport = 0
‘取第5列中的出库数据并求和
For Each rng1 In dic2.Item(var).Rows
dblExport = dblExport +rng1.Cells(5)
Next rng1
‘输出数据到相应的单元格中并计算出入库差
lngLastRow = wks3.Range(“A”& Rows.Count).End(xlUp).Row
For j = 2 To lngLastRow
If dic2.Item(var).Cells(1, 2) =wks3.Cells(j, 2) Then
wks3.Cells(j, 6) = dblExport
wks3.Cells(j, 7).Formula =”=” & _
wks3.Cells(j, 5).Address& “-” & _
wks3.Cells(j, 6).Address
Exit For
End If
Next j
Next var
End Sub
‘使用指定区域的数据填充字典
Function DicData(rngInput AsRange, _
ColIndex As Long, _
blnHeaders As Boolean) AsScripting.Dictionary
Dim i As Long
Dim cell As Range
Dim rng As Range
Dim rngTemp As Range
Dim dic As Scripting.Dictionary
Dim strVal As String
Application.ScreenUpdating = False
Set rng = rngInput.Columns(ColIndex)
Set dic = New Scripting.Dictionary
‘文本比较,不区分大小写
dic.CompareMode = TextCompare
‘是否有标题
If blnHeaders Then
With rngInput
Set rngInput = .Offset(1,0).Resize( _
.Rows.Count – 1, .Columns.Count)
End With
End If
With rngInput
For Each cell In.Columns(ColIndex).Cells
i = i + 1
strVal = cell.Text
If Not dic.Exists(strVal) Then
dic.Add strVal, .Rows(i)
Else
‘将前几列具有相同数据的行存储在同一字典键
Set rngTemp = Union(.Rows(i),dic(strVal))
dic.Remove strVal
dic.Add strVal, rngTemp
End If
Next cell
End With
Set DicData = dic
Application.ScreenUpdating = True
End Function
运行代码后,即可得到上图3所示的结果。
代码的图片版如下:


猜你喜欢
- 华硕电脑怎么安装Win10和Win7双系统?许多用户在使用电脑的时候,经常会为自己的电脑系统安装两个电脑系统,这样方便了用户工作中可以更好的
- 我们在编辑excel表格时,有可能遇到需要在excel2007单元格中输入日期或时间的情况,例如记录员工的出生日期或者进厂日期等,此时可通过
- 有两台视频监控主机,为了节约项目成本,现场只配备了一台显示器,那么就需要使用视频切换器。 A、B按钮为两路视频源切换开关。 上图为背面板接线
- 电脑风扇与电脑的使用密切相关,调节电脑风扇的转速来控制电脑CPU的散热是用户非常关注的一个问题。那微星要怎么设置CPU风扇转速呢?下面小编就
- 在工作当中,我们经常会使用到办公软件office系列,尤其是Word。在对文档进行编辑的过程中,肯定避免不了插入多张图片、表格、形状、文本框
- 解决方法:1、选择WPS文档,右键选择【打开方式】>【选择默认程序】;2、在窗口中,选择WORD,勾选【始终使用选择的程序打开这种文件
- 升级win10之后,Windows 10的强制自动更新机制给不少用户带来了各种各样的麻烦。因此,为了正常的工作不 * 扰,最好的办法就是及时避
- 最近有win10系统用户反映,电脑每次开机的时候,都会显示“pressto start onekey ghost. timeout:2 倒计
- 在电脑浏览器中上网的时候,有用户发现自己总是看到各种的弹窗广告,影响了自己的使用。这些广告要怎么去进行关闭呢?本篇就为大家分享详细的方法教程
- 关于edge浏览器双击关闭标签页的功能有时没反应的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识,小编为大家整理出edg
- 我们都知道现在鼠标上都有很多的按键,有很多用户想要知道如今六个按键的鼠标按键的功能,那么鼠标六个按键各有什么功能呢?下面小编就为大家带来鼠标
- Windows 7系统默认在桌面上没有显示Internet Explorer图标,下面为大家介绍下如何创建一个仿真度99.99%的Inter
- 使用Excel的数据源来进行分享,Excel数据的表格,透视表这些,其实对于HR来说,是非常眼熟的。以下是小编为您带来的关于HR数据分析Ex
- 一些xp系统电脑用户在连接无线网络的时候遇到:区域中找不到无线网络这个问题,那么,为什么会出现这个问题呢?小编分析,xp系统电脑提示:区域中
- Mac系统里的终端程序,是非常实用的应用,用户经常使用终端程序来执行各种命令,一些新手用户不知道如何在终端输入文件路径,下面我们分享下操作步
- YY语音是一款通讯软件,用户在YY语音软件上可以进行聊天、视频等操作,YY最强大的一点就是视频直播功能,这吸引了无数玩家使用这款软件,在使用
- win7的页面相对xp而言可以说非常炫,但是令很多游戏玩家头疼的是,很多游戏在win7系统里面不能全屏,今天小猪就和大家分享下,win7游戏
- Win11系统中,很多功能和之前的旧系统不一样,很多新功能设置都还不是很了解,今天小编就为大家带来Win11系统里更改声音输出设
- Alfred是一款屡获殊荣的Mac OS X应用程序,可通过热键,关键字,文本扩展等方式提高效率。搜索您的Mac和网络,并通过自定义操作更高
- 我们有时候会因为下载的文件被杀毒防护拦截而去关闭它,但是有小伙伴说自己关闭的这个功能文件还是会被删除,那么遇到这种情况要怎么办呢?下面就和小