如何修改现有Excel VBA筛选代码实现K列指定关键词过滤功能
代码调整方案
核心修改逻辑
原来的代码逻辑本身没问题,不需要修改.Value2属性,只需要调整匹配的列位置、筛选字段序号、以及对应保留的关键词即可:
- K列对应的列索引是11,筛选参数
Field要调整为11 - 读取单元格内容的列标识从原来的"E"改为"K"
Select Case后的匹配项改为你需要保留的K列目标文本(注意原代码用了UCase做不区分大小写匹配,所以Case后的关键词要写全大写形式)- 如果你不需要原来插入E列的逻辑,可以直接删除对应代码段
修改后的完整代码示例
Sub IMChangeNotice() Dim lrow As Long, i As Long, lr As Long Dim CNMaster As Worksheet lrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Set CNMaster = ActiveWorkbook.Worksheets(1) On Error Resume Next '不需要操作E列的话可以删除下面三行原来的插入列代码 ' Range("E:E").Select ' Selection.Insert Shift:=xlToRight ' Range("E2:E" & lrow).FormulaR1C1 = "=LEFT(RC[1],2)" '开启自动筛选 Range("A1:O" & lrow).AutoFilter Set arr = CreateObject("scripting.dictionary") With CNMaster lr = .Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lr '修改为读取K列内容,UCase转大写实现不区分大小写匹配 Select Case UCase(.Cells(i, "K").Value2) '这里替换为你需要保留的K列关键词,全部写大写 Case "新品入库", "库存调整", "价格更新", "供应商变更", "临期处理" '符合保留条件的不做处理 Case Else '不符合的加入待删除字典 arr.Item(CStr(.Cells(i, "K").Value2)) = vbNullString End Select Next i 'Field参数修改为11,对应K列 .Range("A1:O" & lr).AutoFilter Field:=11, Criteria1:=arr.keys, Operator:=xlFilterValues .Cells(1, 11).Offset(1, 0).Resize(lrow - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With CNMaster.ShowAllData Set arr = Nothing ChangeType '如果不需要调用原来的ChangeType函数可以删除这行 End Sub
注意事项
- 如果你需要区分大小写匹配关键词,删除
UCase()包裹即可,Case后的关键词写你需要的原文形式 - 运行代码前请务必备份原文件数据,避免误删无法恢复
- 如果你的表格列范围不是A到O,需要对应修改代码里的
Range("A1:O" & lr)部分
内容的提问来源于stack exchange,提问作者Deke
相关产品推荐
相关产品推荐

