Как удалить строку на основе значения ячейки
У меня есть рабочий лист, мне нужно удалить строки на основе значения ячейки.
Клетки для проверки находятся в столбце A..
Если ячейка содержит "-".. Удалить строку
Я не могу найти способ сделать это. Я открываю книгу, копирую все содержимое в другую книгу, а затем удаляю целые строки и столбцы, но есть определенные строки, которые необходимо удалить по значению ячейки.
Нужна помощь здесь.
UPDATE
Пример данных, которые у меня есть
![Sample]()
Ответы
Ответ 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", "=*-*"
Это сэкономило мне много работы. Удачи!