Подтвердить что ты не робот

Как удалить строку на основе значения ячейки

У меня есть рабочий лист, мне нужно удалить строки на основе значения ячейки.

Клетки для проверки находятся в столбце A..

Если ячейка содержит "-".. Удалить строку

Я не могу найти способ сделать это. Я открываю книгу, копирую все содержимое в другую книгу, а затем удаляю целые строки и столбцы, но есть определенные строки, которые необходимо удалить по значению ячейки.

Нужна помощь здесь.

UPDATE

Пример данных, которые у меня есть

Sample

4b9b3361

Ответ 1

Снимок экрана был очень полезен - следующий код выполнит задание (если данные находятся в столбце A, начиная с A1):

Sub RemoveRows()

Dim i As Long

i = 1

Do While i <= ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count

    If InStr(1, ThisWorkbook.ActiveSheet.Cells(i, 1).Text, "-", vbTextCompare) > 0 Then
        ThisWorkbook.ActiveSheet.Cells(i, 1).EntireRow.Delete
    Else
        i = i + 1
    End If

Loop

End Sub

Файл с образцом является общим: https://www.dropbox.com/s/2vhq6vw7ov7ssya/RemoweDashRows.xlsm

Ответ 2

Самый простой способ сделать это - использовать filter.

Вы можете либо фильтровать для любых ячеек в столбце A, у которых нет фильтра "-" и "копировать/вставлять", или (мой более предпочтительный метод) для всех ячеек, у которых есть "-", а затем выбрать все и delete - После удаления фильтра вы остаетесь с тем, что вам нужно.

Надеюсь, что это поможет.

Ответ 3

Вы можете скопировать следующую формулу в новый столбец...

=IF(ISNUMBER(FIND("-",A1)),1,0)

... затем отсортируйте по этому столбцу, выделите все строки, в которых значение равно 1, и удалите их.

Ответ 4

Если вы не слишком большой файл, вы всегда можете отсортировать его по столбцу, который имеет - и как только они все вместе, просто выделите и удалите. Затем повторите сортировку до того, что вы хотите.

Ответ 5

Вы можете прокручивать каждую ячейку своего диапазона и использовать функцию InStr, чтобы проверить, содержит ли ячейка строку в вашем случае; дефис.

Sub DeleteRowsWithHyphen()

    Dim rng As Range

    For Each rng In Range("A2:A10") 'Range of values to loop through

        If InStr(1, rng.Value, "-") > 0 Then 'InStr returns an integer of the position, if above 0 - It contains the string
            rng.Delete
        End If

    Next rng

End Sub

Ответ 6

если вы хотите удалить строки на основе определенного значения ячейки. предположим, что у нас есть файл, содержащий 10000 строк, и поля, имеющие значение NULL. и на основе этого нулевого значения нужно удалить все эти строки и записи.

вот несколько простых советов. Сначала откройте диалоговое окно "Найти замену" и на вкладке "Заменить" сделайте все ячейки, содержащие значения NULL, "Пусто". затем нажмите F5 и выберите опцию "Пустой", щелкните правой кнопкой мыши на активном листе и выберите "Удалить", затем параметр "Целая строка".

он удалит все эти строки на основе значения ячейки, содержащей слово NULL.

Ответ 7

Это макрос автофильтра, из которого вы можете создать функцию:

Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:="=*-*", Operator:=xlAnd
Selection.AutoFilter

Я использую эту функцию автофильтра для удаления совпадающих строк:

Public Sub FindDelete(sCol As String, vSearch As Variant)
'Simple find and Delete
Dim lLastRow As Integer
Dim rng As Range
Dim rngDelete As Range
    Range(sCol & 1).Select
    [2:2].Insert
    Range(sCol & 2) = "temp"
    With ActiveSheet
        .usedrange
            lLastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
        Set rng = Range(sCol & 2, Cells(lLastRow, sCol))
            rng.AutoFilter Field:=1, Criteria1:=vSearch, Operator:=xlAnd
        Set rngDelete = rng.SpecialCells(xlCellTypeVisible)
            rng.AutoFilter
            rngDelete.EntireRow.Delete
        .usedrange
    End With
End Sub

назовите его так:

call FindDelete "A", "=*-*"

Это сэкономило мне много работы. Удачи!