简体   繁体   English

根据单元格值删除行

[英]Delete Rows Based on Cell Values

I want to delete any row in a data table with a cell value in column B of "3DO" or "DOS" and shift remaining cells up. 我想删除数据表中带有“ 3DO”或“ DOS”列B的单元格值的任何行,并向上移动其余单元格。

Screenshot of data table 数据表的屏幕截图
在此处输入图片说明

Workbook Name: StackOverflowTest.xlsm 工作簿名称:StackOverflowTest.xlsm

Worksheet Name: Sheet1 工作表名称:Sheet1

Cell range: A1:J100000 像元范围:A1:J100000

Column with value: B 值列:B

Values to search for: "3DO", "DOS" 搜索值:“ 3DO”,“ DOS”

My understanding is that the following VBA code could be altered to achieve this: 我的理解是可以更改以下VBA代码以实现此目的:

Sub Delete_Rows_Based_On_Value()
'Apply a filter to a Range and delete visible rows
'Source: https://www.excelcampus.com/vba/delete-rows-cell-values/


Dim ws As Worksheet

  'Set reference to the sheet in the workbook.
  Set ws = ThisWorkbook.Worksheets("Regular Range")
  ws.Activate 'not required but allows user to view sheet if warning message appears

  'Clear any existing filters
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

  '1. Apply Filter
  ws.Range("B3:G1000").AutoFilter Field:=4, Criteria1:=""

  '2. Delete Rows
  Application.DisplayAlerts = False
    ws.Range("B4:G1000").SpecialCells(xlCellTypeVisible).Delete
  Application.DisplayAlerts = True

  '3. Clear Filter
  On Error Resume Next
    ws.ShowAllData
  On Error GoTo 0

End Sub

UPDATE: 更新:

This code from @Harun24HR seems to do the trick for me @ Harun24HR的这段代码似乎对我有用

Sub DelVisible()
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("RAW")

    ws.Range("$A$1:$J$100000").AutoFilter Field:=2, Criteria1:="=3DO", _
        Operator:=xlOr, Criteria2:="=DOS"

    ws.Range("$A$2:$J$100000").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ws.Range("$A$1:$J$100000").AutoFilter

End Sub

But now I'd like to add more criteria to search for in this statement and I'm unclear on how to do that. 但是,现在我想在此语句中添加更多要搜索的条件,并且不清楚如何执行此操作。 Say I am looking for "3DO", "DOS", and "Mac" for example, how would I add the "Mac" criteria in addition to this statement? 假设我要查找“ 3DO”,“ DOS”和“ Mac”,那么除了此语句外,我还将如何添加“ Mac”标准?

Update #2 更新#2

Thanks to @user11053804 I have a working solution for looking for 3+ criteria 感谢@ user11053804,我有一个可以解决3个以上标准的有效解决方案

Sub RemoveOldPlatforms()
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("RAW")

    ws.Range("$A$1:$J$100000").AutoFilter Field:=2, Criteria1:=Array("3DO", "All Other", "DOS", "Mac"), Operator:=xlFilterValues

    ws.Range("$A$2:$J$100000").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ws.Range("$A$1:$J$100000").AutoFilter

End Sub

What about following codes? 接下来的代码呢? Can you please have a try and feedback us. 您能否尝试一下并反馈给我们。

Sub DelVisible()
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Regular Range")

    ws.Range("$A$1:$J$10000").AutoFilter Field:=2, Criteria1:="=3DO", _
        Operator:=xlOr, Criteria2:="=DOS"

    ws.Range("$A$2:$J$10000").SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ws.Range("$A$1:$J$10000").AutoFilter

End Sub

Your AutoFilter statement is inadequate. 您的自动筛选器语句不足。

ws.Range("B3:B1000").AutoFilter Field:=1, Criteria1:="EDO", Criteria2:="DOS", operator:=xlOr

Additional criteria would require an array with xlFilterValues. 其他条件将需要一个带有xlFilterValues的数组。

ws.Range("B3:B1000").AutoFilter Field:=1, Criteria1:=array("EDO", "DOS", "All Others"), operator:=xlFilterValues

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM