Я пытаюсь удалить строки, которые не соответствуют определенному значению.
Моя текущая формула для определения несовпадающих строк:
=IF(K3<>L3,"No match","")
Это хранится в столбце «M» моего рабочего листа, озаглавленного «Отчет один».
Как заставить Excel автоматически удалять строки, где значение = «Нет совпадения» в столбце M.
Прокрутите строки и посмотрите, является ли значение «Нет совпадения», используя 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" & r).value = "No match" then Range(r & ":" & r).EntireRow.Delete
next r
end sub
Вы можете изменить столбец «M» в строке LR на что-то другое.
Если у вас есть таблица со 100 строками данных, но столбец M распространяется на строку 1000, то 900 строк (как минимум) будут удалены.
Либо вы измените свою формулу, чтобы она не давала совпадения, когда она пуста, либо измените столбец, чтобы определить столбец для «подсчета».
Если вы действительно хотите автоматически удалять строки всякий раз, когда значение ячейки в столбце 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" & 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, так как начинаю со второго ряда. Однако код не компилируется, я получаю «Недопустимая внешняя процедура». Пытался добавить Sub в начале и Sub End в конце, но, похоже, не работает. Что мне не хватает?