选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA
Posted
技术标签:
【中文标题】选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA【英文标题】:VBA that selects specific range of cells and deletes only the highlighted cells and shifts up 【发布时间】:2021-09-29 17:23:10 【问题描述】:我是使用 VBA 的新手。我正在创建一个宏,它扫描一个范围内的每个单元格,以检测任何填充黄色的单元格,删除它们,然后向上移动。然后它应该移动到数据表中的下一个单元格。
我收到“运行时错误'1004':Range 类的删除方法失败”,我认为这是关于我声明的 Range 对象,但我不确定我应该如何正确实现它或者是否有执行此 VBA 的更好方法?这是我目前所拥有的。
Sub DeleteHighlight()
Dim cell As Range
For Each cell In Range("A6:O3863")
If ActiveCell.Interior.Color <> RGB(255,255,0) Then
ActiveCell.Delete Shift:=x1ToUp
Exit For
End If
Next cell
End Sub
【问题讨论】:
Cell
不是 ActiveCell
和 xlToUp
不是 x1ToUp
。此外,您将跳过单元格,因为您正在向下迭代和向上移动。
.Color <> RGB(255,255,0)
是一个非黄色单元格。
【参考方案1】:
@Warcupine 是正确的,您最终会跳过行。相反,您应该从底部循环到顶部。
Sub DeleteHighlight()
Dim lRow As Long
'find last row
lRow = Range("A1").CurrentRegion.Rows.Count
'loop backwards
For i = lRow To 1 Step -1
If Cells(i, 1).Interior.Color = RGB(255, 255, 0) Then
Rows(i).Delete
End If
Next
End Sub
【讨论】:
非常感谢您对 VBA 的反馈。您的代码帮助解决了我的目标! 很高兴听到这个消息!请考虑接受我的回答。【参考方案2】:向上扫描以避免错过已删除单元格下方的单元格。 (未经测试)
Sub DeleteHighlight()
Dim r as Long, c as Long
For r = 3863 to 6 Step -1
For c = 1 To 15 'O
If Cells(r,c).Interior.Color = RGB(255,255,0) Then
Cells(r,c).Delete Shift:=xlToUp
End If
Next
Next
End Sub
【讨论】:
以上是关于选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA的主要内容,如果未能解决你的问题,请参考以下文章