我有一个标题为B1:C1范围的列。数据更像是
+ ---- ---- + +
|标题|
+ ---- ---- + +
| H2 | H3 |
+ ---- ---- + +
| 1 | 2 |
| 3 | 4 |
+ ---- ---- + +
我有一个名为rng的变量,例如
Set rng = Range("B1:C1")
现在使用rng变量,我想选择值“H3”或“2”或“4”。我使用了以下语法
rng.Offset(1,1).value
并且不给我“H3”,它给了我下一列的价值,即d2。
答案 0 :(得分:3)
没有一种直接的方法来解决这种意外行为。我的理解是,对于合并的单元格,偏移的引用基于整个单元格,并且合并的单元格被视为一个单元格而不是许多单元格。
在您的实例中,如果合并Range("B1:C1")
,则下一列(即Offset(0,1)
)为D列.Excel将合并范围视为单个单元格,因此从可视角度来看,下一列是列D和不列C.在我看来,这可能会令人困惑。
解决此问题的最佳方法是避免将合并的单元格用作标题,而是使用Centre Across Selection
格式:
1)去合并范围(“B1:C1”)
2)选择范围(“B1:C1”)>格式>细胞
3)在水平对话框中选择'中心选择'
如果您这样做,那么以下代码将起作用:
Sub GetOffsets()
Dim rng As Range
Set rng = Range("B1")
Debug.Print rng.Offset(1, 0) // H2
Debug.Print rng.Offset(2, 0) // 1
Debug.Print rng.Offset(3, 0) // 3
Debug.Print rng.Offset(1, 1) // H3
Debug.Print rng.Offset(2, 1) // 2
Debug.Print rng.Offset(3, 1) // 4
End Sub
答案 1 :(得分:1)
如果您确实需要使用合并单元格,那么当涉及到合并单元格的偏移时,Excel会出现这个“问题”。在上面的例子中,单元格D2从B1变为偏移(1,1)是有意义的。
一种解决方案是使用嵌套偏移:
你有你的变量:
Set rng = Range("B1:C1")
然后对您的代码使用以下调整:
rng.Offset(1,0).offset(0,1).value
这样,你首先按行偏移,向下移动到B2,然后按列偏移到达C2。