#excel #vba #excel-formula
#excel #vba #excel-формула
Вопрос:
Я пытаюсь удалить строки, которые не соответствуют определенному значению.
Моя текущая формула для определения строк, которые не совпадают =IF(K3<>L3,"No match","")
Это хранится в столбце «M» моего рабочего листа под названием «Отчет один».
Как мне заставить Excel автоматически удалять строки, где значение = «Нет совпадения» в столбце M.
Ответ №1:
Если вы действительно хотите автоматически удалять строки всякий раз, когда значение ячейки в столбце M изменяется на «Не соответствует«, тогда вам понадобится Private Sub Worksheet_Calculate()
решение. Следующий код должен дать вам то, что вы хотите. Предполагается, что ваши данные начинаются со строки 2.
Option Explicit
Private Sub Worksheet_Calculate()
On Error GoTo GetOut
Application.EnableEvents = False
Dim LastRow As Long, c As Range
LastRow = Cells(Rows.Count, 13).End(xlUp).Row
For Each c In Sheets("Report One").Range("M2:M" amp; LastRow)
If c.Value = "No match" Then
c.EntireRow.Delete
End If
Next c
Continue:
Application.EnableEvents = True
Exit Sub
GetOut:
MsgBox Err.Description
Resume Continue
End Sub
Комментарии:
1. Это прекрасный фрагмент кода, спасибо, он сработал.
Ответ №2:
Пройдите по строкам и посмотрите, является ли значение «Не соответствует» с помощью VBA.
Sub DeleteNoMatch()
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, "M").End(xlUp).Row ' last row
for r = LR to 1 step -1 ' adjust the 1 to what row to start at. (header on the table?)
if range("M" amp; r).value = "No match" then Range(r amp; ":" amp; r).EntireRow.Delete
next r
end sub
Возможно, вы захотите изменить столбец «M» в строке LR на что-то другое.
Если у вас есть таблица со 100 строками данных, но столбец M простирается до строки 1000, тогда 900 строк (как минимум) будут удалены.
Либо вы меняете свою формулу так, чтобы она не давала совпадений, когда она пуста, либо меняете, в каком столбце определять значение столбца «count».
Комментарии:
1. Спасибо за это. Я скорректировал 1 на 2, так как начинаю со второй строки. Однако код не компилируется, я получаю «Недопустимую внешнюю процедуру». Пытался добавить Sub в начале и Sub End в конце, но, похоже, не работает. Чего мне не хватает?