У меня есть список номеров строк, которые мне нужно сохранить. Все остальные строки необходимо удалить.
Этот макрос удаляет целые строки на основе номеров строк в списке. Он работает именно так, как задумано.
Как его можно изменить, чтобы удалить все строки, КРОМЕ этих строк в списке?
Dim deleteRows As Range
Dim data() As Variant
Dim i As Double
Dim SourceWks As Worksheet
Dim oldWks As Worksheet
Set SourceWks = Sheets("TBDws")
Set oldWks = Sheets("TBDsamples")
With SourceWks
data = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
End With
Set deleteRows = oldWks.Rows(data(1, 1))
For i = 2 To UBound(data, 1)
Set deleteRows = Union(deleteRows, oldWks.Rows(data(i, 1)))
Next i
deleteRows.Delete Shift:=xlUp
End Sub
Это приведет к удалению всех строк на листе TBDsamples
, которые не указаны в столбце A на TBDws
.
Sub DeleteThings()
Dim SourceWks As Worksheet
Dim oldWks As Worksheet
Dim deleteRange As Range
Dim arrRows() As Variant
Dim Res As Variant
Dim I As Long
Set SourceWks = Sheets("TBDws")
Set oldWks = Sheets("TBDsamples")
With SourceWks
arrRows = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
End With
For I = 1 To oldWks.Range("A" & Rows.Count).End(xlUp).Row
Res = Application.Match(I, arrRows, 0)
If IsError(Res) Then
If deleteRange Is Nothing Then
Set deleteRange = oldWks.Rows(I)
Else
Set deleteRange = Union(deleteRange, oldWks.Rows(I))
End If
End If
Next I
deleteRange.Delete Shift:=xlUp
End Sub
Обратите внимание, что Application.Match
работает во много раз быстрее с диапазоном, чем с массивом, то есть Dim data As Range: Set data = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
(однако используйте лучшее имя переменной).
Не знал этого. :)
Еще один вопрос: хотя этот код работает, когда на листе TBDsamples всего 11 строк, мне нужно, чтобы это число было переменным в зависимости от размера моих данных. Когда я изменяю строку «Для i = 11», чтобы использовать указанную выше переменную, код больше не работает правильно.
Извините, это опечатка - я отредактирую ответ позже, чтобы исправить это.
Пожалуйста, дайте мне знать, когда вы обновитесь. Я хотел бы изменить свой код как можно скорее. Спасибо!
Я обновил код.
Можете ли вы предоставить скриншот примера данных из
SourceWks
?