Excel VBA技术需求:如何删除符合条件的同G列值所有行?
解决VBA批量删除同G列值行的需求
你的需求是先找出所有L列或M列值>90%的行,把这些行的G列值收集起来,再删除所有G列包含这些值的行对吧?原来的代码只删除了触发条件的那一行,没处理同G值的其他行,我帮你修改一下:
思路拆解
- 第一步:遍历所有行,收集所有符合
L>90%或M>90%的行对应的G列值(用集合去重,避免重复处理) - 第二步:再次遍历所有行,删除G列值在收集集合里的所有行
修改后的完整代码
Sub sbDelete_Rows_Based_On_Multiple_Criteria() Dim lRow As Long Dim iCntr As Long Dim deleteValues As New Collection ' 存储需要删除的G列值 ' 第一步:收集所有需要删除的G列值 lRow = Cells(Rows.Count, "G").End(xlUp).Row On Error Resume Next ' 避免重复添加相同值时出错 For iCntr = 2 To lRow ' 从第二行开始遍历(假设第一行是表头) If Cells(iCntr, "L").Value > 0.9 Or Cells(iCntr, "M").Value > 0.9 Then ' 尝试添加到集合,重复值会报错,用On Error忽略 deleteValues.Add Cells(iCntr, "G").Value, Key:=CStr(Cells(iCntr, "G").Value) End If Next iCntr On Error GoTo 0 ' 恢复错误处理 ' 第二步:删除所有G列值在集合中的行(倒序遍历避免漏删) For iCntr = lRow To 2 Step -1 Dim val As Variant ' 检查当前行G列值是否在待删除集合中 For Each val In deleteValues If Cells(iCntr, "G").Value = val Then Cells(iCntr, "G").EntireRow.Delete Exit For ' 找到匹配就跳出内层循环,处理下一行 End If Next val Next iCntr MsgBox "删除完成!" End Sub
代码说明
- 用
Collection存储待删除的G列值,通过Key参数去重,避免重复处理同一个值 - 先正序遍历收集值,再倒序遍历删除行——倒序遍历是因为删除行后,后续行的行号会往前移,倒序不会漏掉行
- 加入了错误处理,防止添加重复值时抛出错误
- 最后弹出提示框确认操作完成
这样修改后,就能实现你要的效果:所有对应L/M>90%的G值的行都会被删除,只留下不在这个集合里的行(比如你示例中的1910910)。
内容的提问来源于stack exchange,提问作者bsbs
相关产品推荐
相关产品推荐

