Удалить целые строки по многим значениям

У меня есть длинный файл excel, из которого мне нужно удалить целые строки, содержащие определенные значения в столбце A. Столбец содержит значения от [PAR001 до PAR0023247], и мне нужно удалить те, которые попадают в диапазон от [PAR002537 до PAR005214]. Какой самый быстрый способ сделать это?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте выполнить поиск по диапазону для «PAR» и используйте метод val() для сравнения различных длин целых чисел без необходимости искать «0», который может быть частью целого числа справа.

Важно считать диапазон в обратном порядке. Кроме того, если у вас есть какие-либо ячейки, начинающиеся с «PAR» над рассматриваемым списком, могут возникнуть проблемы.

Это сработало для меня. Я надеюсь, что это работает для вас.

Public Sub DeleteRows()

Dim arr As Range
Dim tester As String
Dim NumElements As Long


Set arr = Range(Range("A1"), Cells(Rows.Count, 1).End(xlUp))

NumElements = arr.Cells.Count
For i = NumElements To 1 Step -1
    If Left(arr(i), 3) = "PAR" Then
        tester = Right(arr(i), Len(arr(i)) - 3)
        If Val(tester) >= 2537 And Val(tester) <= 5214 Then
            Cells(i, 1).EntireRow.Delete
        End If
    End If
Next i

        
End Sub

Поскольку выбирать не нужно, я удалил соответствующие строки кода.

Dominique 06.04.2022 14:39

Чисто и легко. Проголосовал за

Foxfire And Burns And Burns 06.04.2022 14:59

Спасибо Доминик. Я увидел это после того, как разместил пост, и забеспокоился, что просто испорчу формат, если вернусь. Первый постер!

haplo76 06.04.2022 15:06

Честно говоря, я думаю, что ответ @ haplo76 довольно хорош.

Мой ответ будет работать ТОЛЬКО, если ваши данные отсортировано по возрастанию по этим значениям PARxxxx. Если нет, то используйте ответ @ haplo76

Единственное преимущество этого решения заключается в том, что вам не нужно зацикливаться и удалять все строки в одной строке кода.

В моем тесте я удалил строки [от PAR03 до PAR010].

Sub TEST()
Dim i_row As Long
Dim e_row As Long


'In e_row you want to match the value AFTER the last one you want to to delete
' so if you want to delete from PAR003 to PAR010
' i_row will search for PAR003 but e-row need to search for PAR011!!!

With Application.WorksheetFunction
    i_row = .Match("PAR003", Range("A:A"), 0)
    e_row = .Match("PAR011", Range("A:A"), 0)
End With

Range("A" & i_row & ":A" & e_row).Delete

End Sub

После выполнения кода я получаю:

Еще одним преимуществом является то, что вы можете легко преобразовать эту подпрограмму в общую, требующую удаления только значений PARxx:

Sub TEST()
DELETE_ROWS "PAR003", "PAR011" 'this will delete [PAR003 to PAR010]
End Sub

Sub DELETE_ROWS(ByVal ini_val As String, end_val As String)
Dim i_row As Long
Dim e_row As Long

With Application.WorksheetFunction
    i_row = .Match(ini_val, Range("A:A"), 0)
    e_row = .Match(end_val, Range("A:A"), 0)
End With

Range("A" & i_row & ":A" & e_row).Delete

End Sub

Но, как я сказал вначале, это будет работать, только если ваши данные отсортированы в столбце A и в порядке возрастания. Кроме того, если вы введете значение «PAR00xx», которое не найдено, возникнет ошибка.

Другие вопросы по теме