excel - 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
解决方案
如果我理解正确,则应将整个硬编码单元格范围向右或向左移动,具体取决于列。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
推荐阅读
- powerbi-desktop - 删除列中的重复项但保留 BLANK 和 NULL 单元格
- c# - C# 读取大型非结构化 Json 文件 (7GB+)
- qemu - QEMU virtio/virtconsole 设备解释
- javascript - Number 的子类持续转换回内置的 Number 对象/函数
- c# - 仅 CSOM SharePoint Search API 筛选器文件
- eclipse - XML 报告中的 JUnit @TestFactory 测试名称
- video-streaming - 在 iOS 和 Mac-Safari 上播放带有冒号的 HLS url 失败
- reactjs - 使用 useState React 钩子并调用其他函数
- sql - 撤销由另一个用户授予权限的用户的权限
- python - tslearn TimeSeriesKMeans 如何计算其指标