删除Column1重复行并保留Column5最大值的VBA实现咨询
解决按Column1去重且保留Column5最高值行的VBA方案
实现逻辑
- 先对全表做两次排序:第一优先级按Column1(A列)升序排列,把所有Column1相同的行聚集到一起;第二优先级按Column5(E列)降序排列,让每个Column1分组内Column5数值最高的行排在分组最顶部
- 再执行Column1去重操作,Excel原生去重逻辑会默认保留每个重复分组的第一行,刚好匹配我们要保留最高值行的需求
可直接使用的VBA代码
Sub KeepHighValueWhenDeduplicate() Dim Sht1 As Worksheet Dim LastRow As Long Dim LastCol As Long ' 绑定目标工作表,可自行修改工作表名称 Set Sht1 = Worksheets("Sheet1") ' 自动识别当前数据的最大行、最大列 LastRow = Sht1.Range("A" & Sht1.Rows.Count).End(xlUp).Row LastCol = Sht1.Cells(1, Sht1.Columns.Count).End(xlToLeft).Column ' 关闭屏幕更新,提升大数据量下的运行效率 Application.ScreenUpdating = False ' 按规则排序 Sht1.Range(Sht1.Cells(1, 1), Sht1.Cells(LastRow, LastCol)).Sort _ Key1:=Sht1.Range("A1"), Order1:=xlAscending, _ Key2:=Sht1.Range("E1"), Order2:=xlDescending, _ Header:=xlYes ' 按Column1去重,保留首行(即Column5最高值行) Sht1.Range(Sht1.Cells(1, 1), Sht1.Cells(LastRow, LastCol)).RemoveDuplicates _ Columns:=1, Header:=xlYes ' 恢复屏幕更新 Application.ScreenUpdating = True MsgBox "去重完成,已保留每个Column1分组中Column5最高值行" End Sub
调整说明
- 如果你的Column1不是A列、Column5不是E列,修改代码中
Key1、Key2对应的单元格范围即可 - 如果你的数据表没有表头,将两处
Header:=xlYes改为Header:=xlNo - 执行代码前请先备份原始数据,避免操作失误丢失数据
内容的提问来源于stack exchange,提问作者user16978245
相关产品推荐
相关产品推荐

