选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 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 不是 ActiveCellxlToUp 不是 x1ToUp。此外,您将跳过单元格,因为您正在向下迭代和向上移动。 .Color &lt;&gt; 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的主要内容,如果未能解决你的问题,请参考以下文章

目标 C:如何突出显示 tableView 单元格并在重新加载表格时保持突出显示?

添加 TabBar 推送单元格并向上查看 [Swift]

如何从工作表中获取公式单元格并仅更改一次该公式的变量?

如何移动表格单元格并显示图像?

找到 JTable 单元格并绘制它

删除 tableView 单元格并从 firebase 中删除数据