如何在Excel中基于B列重复且F列为NO的条件删除重复行
Excel批量删除指定重复行需求
我有2000多行Excel数据,B列存在重复值,需要删除同时满足B列重复且F列值为NO的记录。
示例原始数据
| Column A | Column B | Column F |
|---|---|---|
| WEED CONTROL | NC_1014_93979 | Yes |
| WEED CONTROL | NC_1014_93979 | No |
| PEST ANIMAL | NC_1015_82299 | Yes |
| PEST ANIMAL | NC_1015_82299 | No |
| WEED CONTROL | NC_1014_93579 | Yes |
| PEST ANIMAL | NC_1012_508225 | No |
注:上表中F列为No且B列重复的行是待删除记录
处理后目标数据
| Column A | Column B | Column F |
|---|---|---|
| WEED CONTROL | NC_1014_93979 | Yes |
| PEST ANIMAL | NC_1015_82299 | Yes |
| WEED CONTROL | NC_1014_93579 | Yes |
| PEST ANIMAL | NC_1012_508225 | No |
三种解决方法
方法1:辅助列筛选法(新手友好)
- 插入新列(如G列),在G2单元格输入公式:
下拉填充到所有行,=AND(COUNTIF($B:$B,B2)>1,F2="No")TRUE代表需删除的行,FALSE代表保留行。 - 选中数据区域,点击「数据」选项卡的「筛选」按钮。
- 在G列筛选菜单勾选
TRUE,选中这些行右键删除即可。
方法2:高级筛选法(高效无残留)
- 在空白区域(如I1:K1)复制表头,按如下设置条件区域:
- I2、J2填
*,K2填No - I3、J3填
*,K3填Yes - J4输入公式:
=COUNTIF($B:$B,J3)=1
(该条件表示:保留F=Yes的行,或F=No但B列唯一的行,自动排除B重复且F=No的行)
- I2、J2填
- 选中原始数据,点击「数据」→「高级」,选择「将筛选结果复制到其他位置」,指定列表区域为原始数据、条件区域为I1:K4,复制到空白区域即可得到目标数据。
方法3:VBA脚本法(批量重复处理)
按下Alt+F11打开VBA编辑器,插入模块,粘贴以下代码后运行:
Sub DeleteDuplicateNoRows() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim dict As Object Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row Set dict = CreateObject("Scripting.Dictionary") ' 统计B列所有值的出现次数 For i = 2 To lastRow If Not dict.Exists(ws.Cells(i, "B").Value) Then dict(ws.Cells(i, "B").Value) = 1 Else dict(ws.Cells(i, "B").Value) = dict(ws.Cells(i, "B").Value) + 1 End If Next i ' 从后往前删除符合条件的行,避免索引混乱 For i = lastRow To 2 Step -1 If dict(ws.Cells(i, "B").Value) > 1 And UCase(ws.Cells(i, "F").Value) = "NO" Then ws.Rows(i).Delete End If Next i Set dict = Nothing Set ws = Nothing MsgBox "处理完成!" End Sub
内容的提问来源于stack exchange,提问作者Beck
相关产品推荐
相关产品推荐

