У меня есть следующие две колонки (упрощенно)
Bond BMW
Equity Amazon
Bond Netflix
Bond Uber
Equity Google
Мне нужен код, который в основном проходит через первый столбец и удаляет строку, если это Equity
.
Моя идея (с точки зрения цикла for):
for i = 1 to 5
if ws.Cells(i,1).Value = "Bond" Then
Else
ws.Rows(i).Select
End If
Next i
Selection.Delete
End Sub
Проблема, которую я заметил, заключается в том, что удаляется только последняя выбранная ячейка. Я бы подумал, что все ячейки, которые я выделил в цикле, будут выделены. Есть ли особый способ выбрать несколько. (Union
в этом случае работать не будет, так как список будет динамическим).
2 ответа
Обычно при удалении строк вы начинаете снизу и продвигаетесь вверх.
Sub Button2_Click()
Dim LstRw As Long, x
LstRw = Cells(Rows.Count, "A").End(xlUp).Row
For x = LstRw To 1 Step -1
If Cells(x, "A").Value = "Equity" Then
Cells(x, "A").EntireRow.Delete
End If
Next x
End Sub
Чтобы свести активность с листом к минимуму, попробуйте вот так
Sub Button2_Click()
Dim DeleteRange As Range
Dim LstRw As Long, x As Long
LstRw = Cells(Rows.Count, "A").End(xlUp).Row
For x = 1 To LstRw
If Cells(x, "A").Value = "Equity" Then
If DeleteRange Is Nothing Then
Set DeleteRange = Rows(x)
Else
Set DeleteRange = Union(DeleteRange, Rows(x))
End If
End If
Next x
If Not (DeleteRange Is Nothing) Then
DeleteRange.EntireRow.Delete
End If
End Sub
Также нет необходимости возвращаться назад, поскольку удаление выполняется в конце.
Похожие вопросы
Новые вопросы
excel
Только для вопросов по программированию для объектов или файлов Excel или для разработки сложных формул. Вы можете объединить тег Excel с VBA, VSTO, C #, VB.NET, PowerShell, OLE-автоматизацией и другими тегами и вопросами, связанными с программированием, если это применимо. Общая помощь по MS Excel для функций одного листа доступна в Super User.