У меня есть пять листов в одном документе. Первый лист содержит строки, которые содержат значения в первом столбце. Мне нужно удалить все эти строки из остальных листов, которые имеют одинаковое значение в первом столбце, соответствующее значению первого столбца первого листа. Проблема заключается в большом количестве записей с различными значениями столбцов, которые должны быть удалены. Как я могу просто найти все строки, содержащие значения с первого листа (или общие с первым листом) и удалить его?
2 ответа
Просматривая каждое значение в столбце Листа 1 и используя это значение для фильтрации оставшихся 4 листов, вы получите результаты, которые вы ищете.
Sub remove_from_2_to_5()
Dim var As Variant, w As Long, rw As Long
With Sheets(1)
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Not IsEmpty(.Cells(rw, 1)) Then
var = .Cells(rw, 1).Value
For w = 2 To 5
With Sheets(w).Cells(1, 1).CurrentRegion
.AutoFilter
.AutoFilter field:=1, Criteria1:=var
With .Offset(1, 0).Resize(.Rows.Count, .Columns.Count)
If CBool(Application.Subtotal(103, .Columns(1))) Then
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With
.AutoFilter
End With
Next w
End If
Next rw
End With
End Sub
Когда первый цикл For/Next идет вниз по столбцу Sheet1, он записывает найденное значение. Это используется в каждом из оставшихся листов в качестве критериев в .AutoFilter
. Если после применения фильтра отображаются ячейки, строки удаляются.
Вставьте столбец в каждый лист, чтобы проверить, присутствует ли значение в первом столбце на первом листе: =iferror(match(a2,sheet1!a:a,0)>0,false)
Вы получите значение true
в строках с первым столбцом на первом листе, отфильтруйте их и удалите.
Если у вас есть несколько листов, и вам нужно еще более быстрое решение, тогда вам нужен макрос.