首页 > 解决方案 > 从列引用中添加/减去长变量

问题描述

我之前在这里看到了一个帖子,它让我想起了我每隔一段时间就会遇到的一个(非常基本的)问题。我不知道什么是好的标题,我很确定我的不是。

无论如何,假设我得到一个整数列(假设它是 4),将其保存在一个变量中,然后想在 E1 左右各 4 列的列中写入“Test”(意思是 A1和 I1)。我可以在两行代码中使用OffsetCells. 但是我怎样才能在一行中做到这一点?

Sub Test()

    Dim ws As Worksheet
    Dim colnumber As Long

    Set ws = ThisWorkbook.Sheets(1)
    colnumber = 4

    ws.Range("E1").Offset(0, colnumber).Value = "Test"
    ws.Range("E1").Offset(0, -colnumber).Value = "Test" 'works


    ws.Cells(2, 5 + colnumber).Value = "Test2"
    ws.Cells(2, 5 - colnumber).Value = "Test2" 'works

    ws.Range("A3,I3").Value = "Test3" 'works

    ws.Range(ws.Cells(4, 5 - colnumber), ws.Cells(4, 5 + colnumber)).Value = "Test4" 'fills up Range("A4:I4")
End Sub

'ws.Range("A3,I3").Value' 只是为了让我表明可以在一行代码中在两个不连续的单元格中编写相同的内容。我挣扎的是在使用Cells或类似的东西时这样做(我认为我必须这样做,因为我想添加/减去变量colnumber)并且在最后一行代码中它当然会填满从A4to的整个范围I4,即不是我想要的,我只想填满这两个单细胞。

标签: excelvba

解决方案


使用 Union,Range 使用两个单元格作为开始和结束:

Union(ws.Cells(2, 5 + colnumber),ws.Cells(2, 5 - colnumber)).Value = "Test4"

如果要使用 Range,请创建与以下内容连接的地址字符串,

ws.Range(ws.Cells(4, 5 - colnumber).Address(0,0) & "," & ws.Cells(4, 5 + colnumber).Address(0,0)).Value = "Test4"

但这是很多打字。


推荐阅读