Excel2013:[59]匹配不同工作表记录
如何匹配不同工作表中的记录?假如有多个工作表,第一个工作表作为基本表,用于和其他几个表匹配记录,假如一条记录同时出现在了基本表和其他表中,我们就在基本表中标识出来。怎么实现这个过程?
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/430174fec314f1c5b62d97723c27ac5307889d1a.jpg)
首先将Excel文件存为可以执行vba的格式,xlsm格式
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/a749bb0f94fc508cd80d114b01775ddd894cfd1a.jpg)
我们利用SN号作为一条记录是否重复的指标,假如两条记录SN号相同,则认为两条记录匹配
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/979906196120a7cd6ead2d4189b375d7987bdc1a.jpg)
打开开发工具下的visual basic,或者可以按下快捷键alt+F11
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/3b03be7aa010bc336dfbe20892efa25f0d143f1b.jpg)
打开vb界面,我们双击 thisworkbook,大概一个代码界面
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/b442d6d246fe474e6340e50cb0ef354f51b81f1b.jpg)
复制以下代码到代码界面
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/54a89daee8d7592a3a2c36cb9f31dfb6336c671b.jpg)
将鼠标光标移动到代码的任意位置,按下快捷键F5即可执行代码,执行结果可见:在第一个工作表的最后一列标志出了某条记录出现在哪一个工作表中,如果所有工作表都没有匹配,则输出无匹配。
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/31097f43d7d44831eb282014d40f822b75ee511b.jpg)
注意基本工作表总是位于最前面。也是Excel认为的第一个工作表,代码总是用第一个表中的数据与其他表中的数据去匹配,匹配成功则输出工作表的名称。
![Excel2013:[59]匹配不同工作表记录](https://exp-picture.cdn.bcebos.com/2083a5d6e1d06de888a55096ca93cee8b104ac1b.jpg)
本教程用到的代码:复制可用。
Sub pipei()
Set d = CreateObject("scripting.dictionary")
For i = 2 To Worksheets.Count
For j = 1 To Sheets(i).Cells(1, 300).End(xlToLeft).Column
If Sheets(i).Cells(1, j).Text = "SN号" Then
For r = 2 To Sheets(i).Cells(65536, j).End(xlUp).Row
If Not (Sheets(i).Cells(r, j).Value = 0 Or Sheets(i).Cells(r, j).Text = "") Then
d.Add Sheets(i).Cells(r, j).Text, Sheets(i).Name
End If
Next r
End If
Next j
Next i
Sheets(1).Activate
max_col = Cells(1, 300).End(xlToLeft).Column
For c = 1 To max_col
If Cells(1, c).Text = "SN号" Then
For r = 2 To Cells(65536, c).End(xlUp).Row
If d.exists(Cells(r, c).Text) Then
Cells(r, max_col + 1) = d.Item(Cells(r, c).Text)
Else
Cells(r, max_col + 1) = "无匹配"
End If
Next r
End If
Next c
MsgBox "ok"
End Sub