Excel VBA Offset问题:运行代码期望定位D4却得到E5,原因何在?
问题原因与解决方案
核心原因:相对引用逻辑误解
你代码里的testRange.Range("B2")并非指向工作表的绝对B2单元格,而是以testRange区域的左上角为基准点的相对引用:
- testRange的范围是
B2:I10,它的"内部坐标"会将自身左上角(工作表B2)视为A1基准点。 - 因此testRange的"B2"对应工作表的C3(相对于基准点横向+1列、纵向+1行)。
- 再叠加
Offset(2,2),就是从C3向下移动2行、向右移动2列,最终定位到E5,和你实际看到的结果一致。
正确写法(定位到D4)
如果要定位到工作表的D4,有两种清晰的实现方式:
方式1:基于testRange的内部单元格索引
D4相对于testRange的基准点(B2)是第3行、第3列(testRange的第1行是B2,第3行是B4;第1列是B列,第3列是D列),直接用Cells索引:
Sub off() Dim testRange As Range Set testRange = Range("b2:i10") MsgBox ("Here: " & testRange.Cells(3, 3)) End Sub
方式2:基于基准单元格的Offset
直接以testRange的左上角单元格为起点,Offset偏移2行2列:
Sub off() Dim testRange As Range Set testRange = Range("b2:i10") MsgBox ("Here: " & testRange.Cells(1, 1).Offset(2, 2)) End Sub
内容的提问来源于stack exchange,提问作者Singh1027
相关产品推荐
相关产品推荐

