Удалить строки на основе значений ячеек - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу удалить любую строку в таблице данных со значением ячейки в столбце B «3DO» или «DOS» и сдвинуть оставшиеся ячейки вверх.

Снимок экрана таблицы данных
enter image description here

Имя рабочей книги: StackOverflowTest.xlsm

Имя рабочей таблицы: Sheet1

Диапазон ячеек: A1: J100000

Столбец со значением:B

Значения для поиска: "3DO", "DOS"

Насколько я понимаю, следующий код 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

ОБНОВЛЕНИЕ:

Этот код из @ 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

Но теперь я хотел бы добавить больше критериев для поиска в этом утверждении, и мне неясно,как это сделать.Скажем, я ищу «3DO», «DOS» и «Mac», например, как бы я добавил критерии «Mac» в дополнение к этому утверждению?

Update # 2

Спасибо @ 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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

А как насчет следующих кодов?Можете ли вы попробовать и написать нам.

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
0 голосов
/ 13 февраля 2019

Ваш оператор автофильтра неадекватен.

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

Для дополнительных критериев потребуется массив с xlFilterValues.

ws.Range("B3:B1000").AutoFilter Field:=1, Criteria1:=array("EDO", "DOS", "All Others"), operator:=xlFilterValues
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...