如何使用VBA编写Excel宏,匹配两列数据删除首列重复值
实现指定需求的VBA宏代码
Sub 删除第一列与第二列重复内容() Dim 待处理列 As Range, 比对列 As Range Dim 字典 As Object Dim 单元格 As Range ' 提示用户选择待处理的第一列范围 On Error Resume Next Set 待处理列 = Application.InputBox("请选择第一列(需要删除重复内容的列,例如A:A)", Type:=8) If Err.Number <> 0 Or 待处理列 Is Nothing Then MsgBox "未选择有效范围,宏已退出" Exit Sub End If ' 限制只取选区内的第一列,避免多选多列出错 Set 待处理列 = Intersect(待处理列, 待处理列.Parent.UsedRange, 待处理列.Columns(1)) On Error GoTo 0 ' 提示用户选择比对用的第二列范围 On Error Resume Next Set 比对列 = Application.InputBox("请选择第二列(比对基准列,例如C:C)", Type:=8) If Err.Number <> 0 Or 比对列 Is Nothing Then MsgBox "未选择有效范围,宏已退出" Exit Sub End If Set 比对列 = Intersect(比对列, 比对列.Parent.UsedRange, 比对列.Columns(1)) On Error GoTo 0 ' 初始化字典存储比对列的值 Set 字典 = CreateObject("Scripting.Dictionary") ' 如果需要区分大小写,注释掉下一行即可 字典.CompareMode = vbTextCompare ' 把比对列的所有非空值存入字典 For Each 单元格 In 比对列 If 单元格.Value <> "" And Not 字典.exists(单元格.Value) Then 字典.Add 单元格.Value, True End If Next 单元格 ' 遍历待处理列,删除存在字典中的值对应的单元格 Application.ScreenUpdating = False ' 关闭屏幕更新提升运行速度 For Each 单元格 In 待处理列 If 字典.exists(单元格.Value) Then ' 下面二选一,需要哪种就取消对应行的注释: 单元格.ClearContents ' 仅清空单元格内容 ' 单元格.Delete Shift:=xlUp ' 删除单元格,下方内容上移 End If Next 单元格 Application.ScreenUpdating = True MsgBox "处理完成" Set 字典 = Nothing Set 待处理列 = Nothing Set 比对列 = Nothing End Sub
使用说明
- 打开需要处理的Excel文件,按下
Alt + F11调出VBA编辑器 - 右键点击左侧项目栏中的当前工作簿名称,选择「插入」-「模块」
- 将上面的代码粘贴到弹出的模块编辑窗口中
- 按下
F5运行宏,按照弹窗提示选择对应列即可
注意事项
- 操作前建议备份原始数据,避免误删无法恢复
- 默认不区分内容大小写,如果需要区分大小写,注释掉
字典.CompareMode = vbTextCompare这一行即可 - 代码默认仅清空重复内容的单元格值,如果需要删除单元格并让下方内容上移,注释掉
单元格.ClearContents行,取消单元格.Delete Shift:=xlUp行的注释即可
内容的提问来源于stack exchange,提问作者WIW Wrestling
相关产品推荐
相关产品推荐

