首页 > 解决方案 > VBA:清除多个不连续的单元格

问题描述

我现在有以下代码:

Sub ClearTimeline()
    Dim wsTimeline As Worksheet
    Set wsTimeline = ThisWorkbook.Sheets(1)

    wsTimeline.Range("B8, F25, F26, F28, F30, M17, M31, L17, L24:L25, L26, L28, L29:L30, J24:J25, J26, J28, J29:J30, K25, K26, K28, K30").ClearContents

End Sub

我想用更动态的东西替换固定的单元格引用。行不会改变,所以我想改变引用列的方式。我有一个“参考单元格”,即我总能找到/知道所在列的单元格。

Sub ClearTimeline()
    Dim wsTimeline As Worksheet
    Dim referenceDay As Long

    Set wsTimeline = ThisWorkbook.Sheets(1)
    referenceDay = 10

'what works:
    wsTimeline.Range(wsTimeline.Cells(referenceDay - 9, 1)).ClearContents 'clears single cell

    wsTimeline.Range(wsTimeline.Cells(referenceDay - 9, 1), wsTimeline.Cells(referenceDay - 1, 1)).ClearContents 'clears range

End Sub

我的目标是将每一列称为“referenceDay +/- X”,因为即使以其他方式更改工作表,到这一天的距离也将保持不变。但是我如何告诉 Excel 对非连续单元格执行相同的操作?我不知道如何引用它们以及在括号中放入什么wsTimeline.Range

标签: excelvba

解决方案


如果我理解正确,则应将整个硬编码单元格范围向右或向左移动,具体取决于列。Offset()非常适合这个。

在此处输入图像描述

“红色”单元格是初始范围的单元格,选定的单元格是带有Offset(columnoffset:=2). 我已经用来.Select说明差异,因为存在重叠并且颜色不会好:

Sub ClearTimeline()

    Dim wsTimeline As Worksheet
    Set wsTimeline = ThisWorkbook.Worksheets(1)

    Dim timelineRange As Range
    Set timelineRange = wsTimeline.Range("B8, F25, F26, F28, F30, M17, M31, L17, L24:L25, L26, L28, L29:L30, J24:J25, J26, J28, J29:J30, K25, K26, K28, K30")
    timelineRange.ClearContents
    timelineRange.Interior.Color = vbRed

    timelineRange.Offset(columnoffset:=2).Select 'But in general, do not use .Select

End Sub

推荐阅读