查找B列单元格内容,如果查到相同的单元格,只保留最后一行,其余行删除
2026/02/07 19:46:38
这个VBA程序可以帮你实现这个需求。它会遍历B列,找出重复值,只保留最后一行:
**使用方法:**
1 打开Excel文件
2 按 `Alt + F11` 打开VBA编辑器
3 点击 `插入` → `模块`
4 将上面的代码粘贴到模块中
5 按 `F5` 运行程序
**功能说明:**
- 程序会自动处理当前活动工作表
- 从B列底部开始向上遍历,记录每个值的最后出现位置
- 然后删除所有不是最后出现位置的重复行
- 空单元格会被跳过
- 操作过程中会关闭屏幕更新以提高效率
**注意事项:**
- 建议在运行前先备份数据
- 如果数据量很大,可能需要一些时间来完成
- 程序会删除整行,包括该行其他列的数据
- Sub 删除B列重复值并保留最后一行()
- Dim ws As Worksheet
- Dim lastRow As Long
- Dim rng As Range
- Dim cell As Range
- Dim dict As Object
- Dim key As String
- Dim i As Long
- ' 设置当前工作表
- Set ws = ActiveSheet
- ' 获取B列最后一行
- lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
- ' 创建字典用于存储每个值的最后出现行号
- Set dict = CreateObject("Scripting.Dictionary")
- ' 从下往上遍历B列,记录每个值的最后出现行号
- For i = lastRow To 1 Step -1
- key = CStr(ws.Cells(i, "B").Value)
- If key <> "" Then ' 跳过空单元格
- If Not dict.exists(key) Then
- dict.Add key, i ' 只记录第一次遇到的值(从下往上就是最后一行)
- End If
- End If
- Next i
- ' 再次遍历B列,删除不在字典中的行
- Application.ScreenUpdating = False
- Application.Calculation = xlCalculationManual
- For i = lastRow To 1 Step -1
- key = CStr(ws.Cells(i, "B").Value)
- If key <> "" Then
- If dict.exists(key) Then
- If dict(key) <> i Then ' 如果不是最后一行
- ws.Rows(i).Delete
- End If
- End If
- End If
- Next i
- ' 恢复屏幕更新和计算
- Application.ScreenUpdating = True
- Application.Calculation = xlCalculationAutomatic
- MsgBox "已完成!B列重复值已删除,仅保留最后一行。", vbInformation
- End Sub
**使用方法:**
1 打开Excel文件
2 按 `Alt + F11` 打开VBA编辑器
3 点击 `插入` → `模块`
4 将上面的代码粘贴到模块中
5 按 `F5` 运行程序
**功能说明:**
- 程序会自动处理当前活动工作表
- 从B列底部开始向上遍历,记录每个值的最后出现位置
- 然后删除所有不是最后出现位置的重复行
- 空单元格会被跳过
- 操作过程中会关闭屏幕更新以提高效率
**注意事项:**
- 建议在运行前先备份数据
- 如果数据量很大,可能需要一些时间来完成
- 程序会删除整行,包括该行其他列的数据